2009-08-11 6 views
17

मैंने ग्राहक के लिए एक नई PHP साइट बनाई है और शीर्ष रैंकिंग Google परिणामों को पुराने साइट संरचना से नए में रीडायरेक्ट करना चाहता हूं।अपाचे रीडायरेक्ट 301 जीईटी पैरामीटर का उपयोग करते समय विफल रहता है, जैसे कि? Blah =

मैंने दस्तावेज़ दर्जन में एक .htaccess में कई दर्जन रीडायरेक्ट 301 डाल दिए हैं, और कुछ काम ठीक है, मुझे दूसरों के समूह के साथ समस्याएं हैं।

यह ठीक काम करता है:

Redirect 301 /nl/flash/banner_new.swf http://www.example.com/actueel/nieuws.html?action=show&f_id=152 

यह काम नहीं करता! (404 के लिए अग्रणी के बाद से रीडायरेक्ट बस को छोड़ दिया जाता है):

Redirect 301 /nl/index.php?mID=24511&subID=0 http://www.example.com/solutions/printsolutions.html 
Redirect 301 /nl/index.php?mID=24512&subID=0 http://www.example.com/support/koppeling-met-omgeving.html 

रीडायरेक्ट .htaccess फ़ाइल में मिलाया जाता है, और केवल GET पैरामीटर के साथ रीडायरेक्ट विफल दिखाई देते हैं।

क्या कोई कामकाज है? असफल रीडायरेक्ट को अनदेखा करना ग्राहक के लिए एक विकल्प नहीं है। आपके विचारों के लिए धन्यवाद।

उत्तर

15

जबकि Gumbo's answer's तर्क सही था, मैं काम करने के लिए अपने फिर से लिखना नहीं मिल सका।

एक और रिवाइटकंड जोड़ना यह किया। निम्नलिखित परीक्षण किया गया था और ठीक काम करता है।

RewriteCond %{REQUEST_URI} /nl/index.php$ 
RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ 
RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html [L,R=301] 
+2

'रिवाइटरूल' के लिए वास्तविक पैटर्न इस पर निर्भर करता है कि यह सर्वर कॉन्फ़िगरेशन में या .htaccess फ़ाइल में उपयोग किया जाता है और जहां .htaccess फ़ाइल स्थित है। – Gumbo

12

Redirect केवल URL पथ पर काम करता है:

वर्ष यूआरएल-पथ एक केस-संवेदी (% -decoded) पथ एक स्लेश के साथ शुरुआत है। [...]

तो URL क्वेरी (प्रथम ? पहले # के बाद अप करने के लिए बाद वाला हिस्सा) चेक नहीं किया गया।

लेकिन आप mod_rewrite उपयोग कर सकते हैं कि ऐसा करने के लिए:

RewriteCond %{QUERY_STRING} ^mID=24511&subID=0$ 
RewriteRule ^nl/index\.php$ http://www.example.com/solutions/printsolutions.html [L,R=301] 
RewriteCond %{QUERY_STRING} ^mID=24512&subID=0$ 
RewriteRule ^nl/index\.php$ http://www.example.com/support/koppeling-met-omgeving.html [L,R=301] 
12

दोनों Gumbo की और मार्टिन के जवाब से सहमति जताते हुए ... लेकिन:

RewriteCond %{REQUEST_URI} ^/nl/index.php$ 
: मार्टिन के दशक में

टाइपो, वहाँ "^" REQUEST_URI हालत के लिए नियमित अभिव्यक्ति शुरू करने के लिए किया जा होना चाहिए

मैं भी मार्टिजन, गम्बो नहीं, केवल काम कर सकता हूं जहां मेरी .htaccess फ़ाइल थी।

इसके अलावा, यदि आप पैराराइट स्ट्रिंग को फिर से लिखने के साथ पास नहीं करना चाहते हैं, तो आपको "?" URL के अंत पर:

RewriteRule ^.*$ http://www.example.com/solutions/printsolutions.html? [L,R=301] 

अन्यथा, मार्टिन के कोड के बाद, यह लिखा है "यदि आपका यूआरएल /nl/index.php?mID=24511 & है SUBID = 0 तो एक 301 स्थायी रीडायरेक्ट साथ http://www.example.com/solutions/printsolutions.html?mID=24511&subID=0 को अनुप्रेषित हेडर और इस यूआरएल पर अधिक नियमों को संसाधित न करें "

यह हो सकता है कि आप क्या चाहते हैं या नहीं हो सकते हैं, और सामान्य नियम के रूप में निष्पक्ष होने के लिए यदि पैरामीटर समझा नहीं जाता है तो उन्हें बिना किसी नुकसान के अनदेखा किया जाएगा, इसलिए यह शायद कोई फर्क नहीं पड़ता।हालांकि यदि आप किसी इंसान को किसी नए पेज पर रीडायरेक्ट करना चाहते हैं और "सुंदर यूआरएल" चाहते हैं तो पैरामीटर स्ट्रिंग को अलग करना बेहतर है, तो "?" गंतव्य यूआरएल के अंत में।

+0

ग्रेट पॉइंटआउट डिफ़ॉल्ट GET स्ट्रिंग पैरामीटर को कैसे दबाएं "?" अंत में साइन इन करें ... उस की तलाश में था। –

+1

? टिप्पणी इस पोस्ट के लिए एक महान इसके अलावा है। –

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