2012-10-05 56 views
1

Nginx僅提供靜態文件,但某些文件名包含'?'。是的,問號。Nginx重寫規則替換'?'與%3f

所有包含'?'的網址即使文件實際存在,也會產生404。例如

> GET /foo?lang=ar.html HTTP/1.1 
... 
... 
< HTTP/1.1 404 Not Found 

雖然名爲富?郎文件= ar.html不存在預期的位置。

> GET /foo%3flang=ar.html HTTP/1.1 
... 
... 
< HTTP/1.1 200 OK 

我該如何編寫一個rewrite指令,使所有'?'會被重定向到%3f?

回答

1

你應該url-encode您的查詢字符串轉義特殊字符,如?=

具體而言,您有權要求爲,一旦被編碼的文件的名稱,是這樣的:

foo%3Flang%3Dar.html 

在Javascript中,你可以用encodeURIComponent()函數對文件名進行網址編碼,在PHP中你有urlencode()

+0

是的,問題是如何配置nginx以這種方式重定向/重寫請求(問題的意思是更清楚地瞭解這個) –

1

您必須在http調用nginx之前將?編碼爲%3F

原因是url rfc保留?字符作爲特殊字符(特別參見3.3節)。因此,nginx將正確地解釋一個未轉義的?字符作爲URL的路徑部分的結尾