Nginx
是否可以使用 nginx 規範化“雙點”URL?
根據像這樣的RFC3986 URL
http://example.com/catalog/category/goods/../brand/product.html
由一些 UserAgent (捲曲將是很好的例子)轉換為
http://example.com/catalog/category/brand/product.html
如果我愚蠢的 UserAgent 無法以正確的方式解析原始 URL,我該如何使用 nginx 重寫來實現這種行為?
有沒有可能?
您可以將
/./
序列和/goods/../
序列替換為單個/
. 例如:rewrite ^(.*)/\./(.*)$ $1/$2 redirect; rewrite ^(.*)/(?!\.\.)[^/]+/\.\./(.*)$ $1/$2 redirect;
該
/(?!\.\.)[^/]+/
序列應該匹配任何不是另一個的路徑元素..
。上述重寫是遞歸的,並發出 302 響應,直到正確刪除所有/./
和/../
序列。或者,通過將
rewrite...last
語句放置在合適的location
塊中,可以使用內部重定向來實現相同的目的。例如:location / { rewrite ^(.*)/\./(.*)$ $1/$2 last; rewrite ^(.*)/(?!\.\.)[^/]+/\.\./(.*)$ $1/$2 last; }
在這種情況下,瀏覽器地址欄上顯示的 URL 不會改變。
有關該指令的詳細資訊,請參閱此文件,有關否定前瞻斷言的詳細資訊,請參閱此連結。
rewrite