2012-10-18 15 views
10

पर एक क्वेरी स्ट्रिंग के लिए एक यूआरएल को दोबारा लिखना मैं दो अलग-अलग सर्वरों पर कुछ पथ पुनर्लेखन सेट अप करने की कोशिश कर रहा हूं, एक अपाचे पर मॉड-रीराइट का उपयोग करके और एक Nginx पर HttpRewriteModule का उपयोग कर रहा हूं। मुझे नहीं लगता कि मैं कुछ भी जटिल करने की कोशिश कर रहा हूं, लेकिन मेरे रेगेक्स कौशल की कमी कम है और मैं वास्तव में कुछ मदद का उपयोग कर सकता हूं। परअपाचे और Nginx

http://www.server.com/subdirectory/index.php?content=location 

कुछ भी अतिरिक्त:

http://www.server.com/location/ 

इस को इंगित होगा:

विशेष रूप से, मैं, ताकि एक लिंक इस प्रकार फ़ॉर्मेट एक क्वेरी स्ट्रिंग में एक URL का प्रारूप बदलने के लिए कोशिश कर रहा हूँ स्वरूपित यूआरएल का अंत क्वेरी स्ट्रिंग में "सामग्री" पैरामीटर में जोड़ा जाना चाहिए, इसलिए यह:

http://www.server.com/location/x/y/z 

इस पर ले जाना चाहिए:

http://www.server.com/subdirectory/index.php?content=location/x/y/z 

मैं बहुत यकीन है कि यह दोनों अपाचे आधुनिक-पुनर्लेखन और Nginx HttpRewriteModule अनुसंधान के आधार पर मेरे द्वारा की गई का उपयोग कर संभव हो जाना चाहिए, लेकिन मैं यह काम कर पाने के नहीं देख सकते हैं । अगर कोई मुझे इन दोनों सेटअपों के लिए अभिव्यक्तियों को एक साथ रखने के बारे में कुछ संकेत दे सकता है, तो मैं इसकी सराहना करता हूं। धन्यवाद!

उत्तर

3

खोज स्ट्रिंग: (.+)/location/(.*)$

प्रतिस्थापन स्ट्रिंग: $1/subdirectory/index.php?content=location/$2

+0

यह पहला समूह है जो किसी पुनर्लेखन के लिए आवश्यक नहीं है में सर्वर नाम को पकड़ने होगा। – JosefScript

3

अपाचे के लिए, अपने दस्तावेज़ जड़ में htaccess फ़ाइल में, जोड़ें:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/subdirectory/index\.php$ 
RewriteRule ^(.*)$ /subdirectory/index.php?content=$1 [L] 

nginx, आपको सबसे पहले यह सुनिश्चित करना चाहते /subdirectory/index.php के लिए अनुरोधों को पारित करें, फिर बाकी सब कुछ दोबारा लिखें:

location ~ /subdirectory/index\.php$ 
{ 
} 

location/
{ 
    rewrite ^(.*)$ /subdirectory/index.php?content=$1 break; 
} 
+0

दो चरणों की कोई आवश्यकता नहीं है। यदि आप रेगेक्स के साथ "स्थान" पकड़ते हैं, तो "उपनिर्देशिका" के लिए सीधे अनुरोध हमेशा पास होंगे। – JosefScript

5

nginx में आप एक पुनः लिखने के निर्देश में "/ location" से मेल खाते हैं, चर $ 1 में पूंछ स्ट्रिंग को कैप्चर करें और इसे प्रतिस्थापन स्ट्रिंग में जोड़ें।

server { 
... 
rewrite ^/location(.*)$ /subdirectory/index.php?content=location$1 break; 
... 
} 

अपाचे के httpd.conf में यह काफी जैसा दिखता है:

RewriteEngine On 
RewriteRule ^/location(.*)$ /subdirectory/index.php?content=location$1 [L] 

इस पृष्ठ के अंत में उदाहरण पर एक नज़र डालें: https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

2

यह शायद करने के लिए सबसे अच्छा तरीका है nginx में यह कार्य करें:

location ^~ /location/ { 
    rewrite ^/(location/.*)$ /subdirectory/index.php?content=$1 last; 
} 

अधिक जानकारी के लिए, देखें: