2016-07-04 222 views
1

我希望nginx返回'http://example.com'與請求url'http://mydomain/url=http://example.com'使用conf吹,但它給了我'http:/xxx.com' 。使用nginx從URI路徑匹配並重定向「http://」(雙斜槓)

有什麼不對,有人可以幫忙!謝謝。

這是我的nginx的conf

location ~ url=(.*)$ { 
    return 301 $1; 
} 
+1

爲什麼人們試圖發明自己的非標準方式來傳遞參數?簡單的'?url = whatever'有什麼不對? –

+1

Nginx將相鄰的斜槓壓縮爲一個,因爲這是每個人都希望99.99%的時間。您可以用'merge_slashes off;'指令http://nginx.org/r/merge_slashes禁用它,但會有後果,可能是安全漏洞。 –

+0

我的答案解決了您的問題嗎?如果是的話,請點擊接受按鈕(這樣做也可以獲得一些積分)。 – cnst

回答

0

除了阿列克謝十的建議,使用http://nginx.org/r/merge_slashes,這的確可能會導致安全問題,您也可以使用下面的,這可能是一個更好的辦法,反正(如果你已位於設定的URL結構,這是):

location /url= { 
    if ($request_uri ~ ^/url=(.*)$) { 
     return 301 $1; 
    } 
    return 403; 
} 

另一種選擇是:

location /url=http:/ { 
    rewrite ^/url=http:/(.*)$ http://$1; 
} 

順便說一句,我會避免在頂級位置使用正則表達式,因爲它通常比使用上述方法效率低,但基本上也可以對您的方法做同樣的事情。

但是,請注意,無論如何,無條件地將用戶重定向到用戶提供的字符串本身可能會使您的站點容易受到某些攻擊。

相關問題