2008-11-11 18 views
11

मैं Nginx equivalent के लिए निम्न mod_rewrite नियम परिवर्तित करने के लिए देख रहा हूँ:मैं mod_rewrite (QSA विकल्प) को Nginx समकक्ष में कैसे परिवर्तित करूं?

RewriteRule ^foo/(.*)$ /bar/index.php?title=$1 [PT,L,QSA] 
RewriteRule ^foo/*$ /bar/index.php [L,QSA] 

अब तक मेरे पास है:

rewrite ^foo/(.*)$ /bar/index.php?title=$1&$query_string last; 
rewrite ^foo/?$ /bar/index.php?$query_string break; 

समस्या है (मुझे लगता है कि!) क्वेरी स्ट्रिंग नहीं है संलग्न हो जाओ। मुझे Nginx को QSA तर्क पोर्ट करने का कोई तरीका नहीं मिला है।

rewrite ^/foo/([^?]*)(?:\?(.*))? /bar/index.php?title=$1&$2; 
rewrite ^/foo /bar/index.php; 

उत्तर

5

ये पुनर्लेखन नियम स्क्रिप्ट काम कर दिया।

यदि आप इसे नहीं चाहते हैं, तो जोड़ें? आपके नए स्थान के अंत तक

फिर से लिखना ^/foo /bar/index.php? पिछले;

16

QSA nginx में स्वचालित है:

+0

टिप्पणी हटा दी गई – Zoltan

+1

यह सही है। दस्तावेज़ (http://nginx.org/en/docs/http/ngx_http_rewrite_module.html पर) कहते हैं: "यदि प्रतिस्थापन स्ट्रिंग में नए अनुरोध तर्क शामिल हैं, तो पिछले अनुरोध तर्क उनके बाद जोड़े गए हैं।" (नोट: "यदि यह अवांछित है, तो प्रतिस्थापन स्ट्रिंग के अंत में एक प्रश्न चिह्न डालने से उन्हें बचाया जाता है") – Zoltan

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