2012-08-24 34 views
2

我們的一個客戶端已經創建了一個QR碼,其中包含一個空格在url中。 我將如何編寫處理此問題的nginx重定向?Nginx重寫,其中包括一個空白的spce

幾個串中使用像「%20」嘗試似乎引起nginx的錯誤或失敗configtest

爲了精確的QR代碼讀取這樣

http://www.google.com/somestuff/someotherstuf/pagewewant

,我需要重新直接到

http://www.google.com/somestuff/someotherstuf/pagewewant (重新寫入應顯示somestuff後無空格)

感謝您的時間

+0

你的意思是重寫「/ somestuff」/ somestuff break;不起作用? – staafl

+0

你可以發佈你的nginx配置與你當前的重寫嗎? – RickyA

回答

3

問題已經過去兩年了,但也許它會爲別人節省一些頭痛。

警告:我不是nginx專家。這只是我找到這個沒有答案的問題後所嘗試的一件事情,而且恰巧發生了。這可能不是最好的方式。我會建議檢查nginx文檔,以防處理大量此類位置。

偶爾重寫包括空格我把單引號的路徑:

location '/level_one /landingpage.htm' { 
rewrite^http://www.foo.bar/level_one/landingpage.htm permanent; } 

如果由於某種原因,你需要有空格的目標提出,在單引號,以及:

location '/downloads/foo bar.pdf' { 
rewrite^'http://www.foo.bar/documents/foo bar.pdf' permanent; } 
1

我遇到了完全相同的問題。 你不能用20%的原因是,這將nginx的解釋URI,所以20%不匹配:

http request line: "GET /something/%20something HTTP/1.1" 
http uri: "/something/ something" 

我並不想用的位置這一點,所以我用:

rewrite ^/something/\ something /something/something permanent; 

這對我來說工作得很好。

0

如果你想從一個URL中的空格,然後重定向到剝離URL不含空格僅使用以下趕上這個問題的所有URL:

rewrite ^(.*)(\s|%20)(.*)$ $1$3 permanent; 

這之前,基本上抓住一切在捕獲組1中第一次出現空間\s或URL編碼空間%20$1)。然後在第2組中捕獲空間($2)。然後,最後在第3組中捕獲了過去組2中遺留的任何東西($3)。然後我將捕獲組1和3連接在一起($1$3)以形成重定向URL,但捕獲組2中沒有空格($2)。

這將與URL中有多個空格的URL一起工作,但它一次只能工作一個。因此,其中包含2個空格的網址將重定向到帶有1個空格的網址,最後到達不含空格的網址。

如果您願意,您當然可以將重定向類型從永久性更改爲永久性。這將當前重定向301代碼。