2011-05-10 85 views
0

我試圖重寫某些URL與下面的nginx重寫規則Nginx的重寫適當引用符號引起問題

rewrite ^/some\/url\/(.*)\/$ /some/url/?filter=$1; 

重寫似乎並沒有工作,如果查詢包含&例如

?filter=key:abcd & efgh 

這我正確引用到

?filter=abcd%20%26%20N%20efgh 

我的問題是隻有重寫URL /som/url/key:abcd%20%26%20N%20efgh不起作用。如果我訪問它像/some/url/?filter=abcd%20%26%20N%20efgh它工作正常。

我錯過了什麼嗎?

謝謝。

+0

我有類似的問題與Apache的mod_rewrite。我認爲在重寫規則處理之前有一些url解碼完成。最後,我必須將原始URL傳遞給PHP,並直接解析$ _SERVER ['REQUEST_URI']。 – 2011-05-10 19:07:40

回答

0

我注意到,我使用的是舊版本的nginx(7.6)和問題得到解決通過升級到最新的穩定版本(1.0)。

0

將您想要重寫的URL放到另一個「位置」可以解決您的問題。 (我想在位置指令的nginx沒有做任何轉義) 因此,對於你的例子那就是:

location /some/url/ { 
if ($uri ~* ^/some/url/(.*)$ 
{ 
    rewrite ^.*$ /some/url/?filter=$1 break; 
} 
proxy_pass    http://127.0.0.1:8080; 
#proxy_set... <- and other proxy related things 
} 

至少它爲我工作(在我的情況甚至問號用「%3F更換」從官方文檔 摘錄‘注意位置的匹配在$ args變量沒有被解碼,不同的URI。’http://wiki.nginx.org/HttpRewriteModule