2011-10-15 11 views
5

मुझे कुछ आसान समझने में परेशानी हो रही है जो सरल होना चाहिए। मैं एक निर्देशिका में सब कुछ एक नई फाइल में एक ही फाइल में रीडायरेक्ट करना चाहता हूं।एक निर्देशिका से एक फ़ाइल में 301 को रीडायरेक्ट करें

मेरी .htaccess में, मैं पहले से ही निम्नलिखित ...

Redirect 301 /myDir/ http://www.mydomain.com/myNewDir/index.html 

और इस ...

Redirect 301 /myDir/ http://www.mydomain.com/myNewDir/ 

और इस ... की कोशिश की है

Redirect 301 /myDir http://www.mydomain.com/myNewDir 

समस्या यह है कि उनमें से प्रत्येक बस 01 के भीतर प्रत्येक फ़ाइल मैप कर रहे हैं, और इसे गंतव्य यूआरएल के अंत में जोड़ना।

Googling के बाद, मैं कुछ है कि ऐसा करने के लिए कहा ...

Redirect 301 ^/myDir(.*) http://www.mydomain.com/myNewDir 

देखा लेकिन वह सिर्फ एक ही बात करता है ... यह URL के अंत में मौजूदा फ़ाइल स्थान मानचित्रण है।

यह के बहुत सारे खोजना आसान था ऑनलाइन "अनुप्रेषित .htaccess" ट्यूटोरियल लेकिन वे केवल 'एक-से-एक फाइल मानचित्रण' या 'एक-से-एक निर्देशिका मानचित्रण' की तरह स्पष्ट उदाहरणों से पता चलता लगते हैं। ये ट्यूटोरियल विभिन्न प्रासंगिक फ़ाइल निर्देशों और उन्हें सही तरीके से उपयोग करने के तरीके को समझाते हुए उपेक्षा करते हैं।

यह विशेष होस्टिंग खाता कचरा है और इसमें FrontPage एक्सटेंशन भी स्थापित हैं। मॉड-रीराइट विफल रहता है (पूरी साइट तोड़ता है) अभी तक Redirect 301 लाइनें ठीक काम कर रही हैं। इसलिए जब तक मैं इस नई (गैर-फ्रंट पेज) साइट को एक और मजबूत होस्टिंग खाते में स्थानांतरित नहीं कर सकता, मुझे Redirect 301 एक-लाइनर के साथ रहना होगा।


कैसे मैं बस एक Redirect 301एक ही एकल फाइल/myNewDir/index.html में स्थित करने के लिए /myDir/ भीतर सब कुछ रीडायरेक्ट करने के लिए उपयोग कर सकते हैं? (यदि संभव हो तो मैं सिर्फ /myNewDir/ का उपयोग करना पसंद करूंगा)। कृपया अपने समाधान में उपयोग किए गए फ़ाइल निर्देशों को विस्तार से समझाएं।


अद्यतन:

पहले स्वीकार किए जाते हैं जवाब से काम नहीं कर रहा है।

उदाहरण:

RedirectMatch 301 /myDir1/(.*) http://mydomain.org/newpath/myDir1/index.html 

... दे रहा है एक त्रुटि "बहुत सारे रीडायरेक्ट खोलने की कोशिश कर हुई"।

इसका कारण यह है /myDir1/(.*) स्ट्रिंग के भीतर कहीं मिलान है, इसलिए यदि लक्ष्य URL होता है /myDir1/ कहीं भी, न सिर्फ जड़ है, यह एक बुरा लूप में पुनः निर्देशित कर दिया जाएगा।

सही समाधान के लिए अपना स्वयं का पोस्ट उत्तर देखें।

RedirectMatch 301 /myDir/.* http://www.mydomain.com/myNewDir/index.html 

संदर्भ::

उत्तर

12

का उपयोग भी किया जा सकता है मुझे अपनी पुरानी परियोजनाओं में से एक के भीतर जवाब मिला।

Redirect 301 इसके लिए सब कुछ गलत है। मैं वास्तव में RedirectMatch 301 चाहता था।

RedirectMatch 301 ^/myDir/(.*) http://www.mydomain.com/myNewDir/ 

स्पष्टीकरण (ओं):

http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch

"। यह निर्देश पुन: निर्देशित करने के लिए बराबर है, लेकिन सरल उपसर्ग मिलान के बजाय, मानक नियमित अभिव्यक्ति का उपयोग करता है"

http://www.zytrax.com/tech/web/regex.htm

"^ (स्वरित या कैरट) वर्ग कोष्ठक के बाहर का मतलब है STRING1 में लक्ष्य स्ट्रिंग की शुरुआत में ही लग रहे हैं, उदाहरण के लिए,^जीत प्राप्त नहीं कर सकेंगे विंडोज लेकिन^मोज़िला मोज़िला मिलेगा। "

और ...

"। (अवधि) इस स्थिति में किसी भी चरित्र (s), उदाहरण के लिए, टन का मतलब है। टन, स्वर और tonneau लेकिन प्रचंड मिलेगा क्योंकि इसमें चरित्र के बाद नहीं है। "

और ...

* (तारांकन या स्टार) पूर्ववर्ती चरित्र से मेल खाता है 0 या अधिक बार, उदाहरण के लिए, tre पेड़ (2 बार) खोजने के लिए और चलने देंगे (1 बार) और गर्त (0 बार)। *

+0

अच्छा धन्यवाद। यह मुझे पागल ड्राइव शुरू कर रहा था। यह किसी दिए गए पृष्ठ पर एक संपूर्ण निर्देशिका (प्रत्येक पृष्ठ के भीतर) की सामग्री को निर्देशित करने के लिए काम करता है। – Tom

+0

यह भी उल्लेखनीय है कि यदि आपके पास पहले से गलत स्थान पर जाने के लिए 301 रीडायरेक्ट था (पृष्ठ को गंतव्य यूआरएल में जोड़ना), तो आपको .htaccess से नया नियम लेने से पहले अपने ब्राउज़र कैश को साफ़ करने की आवश्यकता हो सकती है। – Russ

1

इस प्रयास करें http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch

जहाँ तक कोष्ठक के आसपास। * का संबंध है, RedirectMatch मानक नियमित अभिव्यक्ति का उपयोग करता है के रूप में, जिसका अर्थ है कि आप का मिलान नहीं हुआ पात्रों को पकड़ने और उन्हें $ 1, $ 2, आदि

नियमित रूप में refferencing अपने रीडायरेक्ट नियम में उन्हें इस्तेमाल कर सकते हैं अभिव्यक्ति * का मतलब पिछले चरित्र की दोहराव की संख्या है। । - किसी भी चरित्र को दर्शाता है। तो संयोजन। * कहता है कि यह पैटर्न किसी भी चरित्र से मेल खाता है। अत * । * का मतलब है कि यह पैटर्न/myDir और/myDir /, और अभी भी /myDir/test.html से मेल खाता है। इसलिए * । *

+0

हाँ, यह काम करता है। मुझे पता है कि '। *' सभी फाइलों से मेल खाता है। लेकिन क्या आप उस पर विस्तार कर सकते हैं? कोई बदलाव? '(। *)' क्यों काम कर रहा है? इस पर ऑनलाइन दस्तावेज का एक लिंक? धन्यवाद! – Sparky

+0

देखें: http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch आसपास के ब्रैकेट के बारे में।* रीडायरेक्टमैच मानक नियमित अभिव्यक्तियों का उपयोग करता है, जिसका अर्थ है कि आप मिलान किए गए वर्णों को कैप्चर कर सकते हैं और उन्हें अपने रीडायरेक्ट नियम में $ 1, $ 2, आदि के रूप में संदर्भित कर सकते हैं। – dfsq

+0

नियमित अभिव्यक्तियों में * पिछले चरित्र की पुनरावृत्ति का कोई भी मतलब है। '.' - किसी भी characher को दर्शाता है। तो संयोजन। * कहता है कि यह पैटर्न किसी भी चरित्र से मेल खाता है। अत * । * का मतलब है कि यह पैटर्न/myDir और/myDir /, और अभी भी /myDir/test.html से मेल खाता है। इसलिए * । * भी इस्तेमाल किया जा सकता है। – dfsq

संबंधित मुद्दे