2009-07-22 14 views
15

मैं संबंधित पथ के साथ .htaccess में RewriteRules उपयोग करने के लिए कोशिश कर रहा हूँ, लेकिन अपाचे उत्पादन के लिए सर्वर पथ के बजाय शारीरिक पथ चाहते हैं कि जब भी मैं उत्पादन के लिए एक रिश्तेदार पथ की कोशिश लगती है। पूर्ण और सर्वर-रूट पथ ठीक काम करते हैं। उदाहरण के लिए:अपाचे का रिवाइटरूल स्थानीय पथ क्यों खुलासा करता है?

RewriteEngine On 

# this works fine, 127.0.0.1/ab redirects to 127.0.0.1/cd 
RewriteRule ^ab$ /cd [R] 

# this doesn't work... 127.0.0.1/wx redirects to 127.0.0.1/C:/path/to/files/yz 
RewriteRule ^wx$ yz [R] 

जोड़ना एक "RewriteBase /" समस्या का हल है, लेकिन यह हर .htaccess के लिए पथ को जोड़ने के लिए कठिन है, और यह यह कठिन निर्देशिका संरचना को बदलने के लिए बनाता है। क्या वर्तमान कारण यूआरआई पथ के बजाय वर्तमान भौतिक पथ पर रीवाइटबेस डिफ़ॉल्ट है?

उत्तर

5

यह [आर] के कारण है जिसका अर्थ है कि सर्वर नए पथ पर रीडायरेक्ट करेगा (इसलिए उपयोगकर्ता का ब्राउज़र आंतरिक रूप से यूआरआई को स्थानीय पथ में अनुवाद करने के बजाय नए भेजे गए यूरी के साथ एक नया अनुरोध जारी करेगा)।

आपके पहले रिवाइटरूले में, नए पथ में एक स्लैश है, इस प्रकार सर्वर स्थानीय पथ पर इसका अनुवाद करने की कोशिश नहीं करता है, लेकिन दूसरे नियम में, कोई स्लैश नहीं है, यही कारण है कि यह रीडायरेक्ट करता है एक पूर्ण स्थानीय मार्ग। यह भी बताता है कि यह रीवाइटबेस सेट के साथ क्यों काम करता है।

या तो [आर] को हटा दें (आप इसे अपने मामले में एक [एल] द्वारा प्रतिस्थापित कर सकते हैं, यह सर्वर को मिलान करने के बाद अन्य नियमों से मेल खाने का प्रयास करने से बचाता है), या "yz" से पहले एक स्लैश जोड़ें आपका दूसरा रिवाइटरूल।

मैं सुझाव देता हूं कि [आर] को [एल] के साथ आसानी से प्रतिस्थापित करें: इस तरह, उपयोगकर्ता को पुनर्लेखित पथ नहीं दिखाई देगा, जो आम तौर पर रीव्राइट्यूलस (मुख्य रूप से एसईओ प्रयोजनों के लिए) करने का इरादा रखता है, जब तक कि आप विशेष रूप से अपने उपयोगकर्ताओं को एक नए यूआरएल पर रीडायरेक्ट करना चाहते हैं।

+0

मुझे नए पथ पर वास्तविक रीडायरेक्ट चाहिए - मैं शॉर्टकट यूआरएल और सही टाइपो बनाने के लिए इसका उपयोग कर रहा हूं। क्या प्रत्येक .htaccess फ़ाइल में मैन्युअल रूप से रीवाइटबेस सेट करने से बचने का कोई तरीका है? – zildjohn01

+0

सामान्य रूप से आपको 'रिवाइटबेस' को बदलने की आवश्यकता नहीं है। बाहरी रीडायरेक्ट के लिए आंतरिक और पूर्ण पथ के लिए बस सापेक्ष पथ का उपयोग करें। – Gumbo

+1

क्या आप कृपया बता सकते हैं कि आपका क्या मतलब है? मेरे कोड में मैंने एक आंतरिक रीडायरेक्ट के लिए एक सापेक्ष पथ का उपयोग किया था, और यह वर्णित अवांछनीय व्यवहार के साथ समाप्त हुआ। – zildjohn01

12

जो लोग गूगल (मेरे जैसे) से यहां पहुंचने के लिए होने के लिए, कम चेकलिस्ट:

  • सुनिश्चित करें कि आप RewriteBase / किया हुआ है -

  • (या किसी अन्य मूल्य बयान क्या महत्वपूर्ण है)
  • आप रीडायरेक्ट ([R], [R=30x], आदि) का उपयोग करते हैं - सुनिश्चित करें कि नए URI एक / साथ शुरू होता है और अपने डोमेन जड़ के पथ रिश्तेदार शामिल कर

  • (यदि उपरोक्त अभी तक मदद नहीं की) पुनः प्रारंभ अपाचे, अपने ब्राउज़र का कैश साफ़ (खासकर यदि आप कुछ बिंदु पर [R=301] का इस्तेमाल किया है)

है यही कारण है कि मेरा दिन बचाया, हो सकता है आप भी इसे अपना बचत होगी।

+0

हां। मेरी मदद की। –

+0

rewritebase/मदद की। धन्यवाद – OzzyTheGiant

0

इस कोशिश करो और मुझे परिणाम बता:
# यह काम नहीं करता ... 127.0.0.1/wx 127.0.0.1/C:/path/to/files/yz

को

पुनर्निर्देश रिवाइट्रूल^wx $/yz [R]

yz से पहले/पहले रखें।

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