Nginx
為什麼 nginx 在重寫規則上更改 HTTP 方法?
每當我在 上收到請求時,我都會使用以下重寫規則
mydomain.com
將其重定向到子域:www
server_name mydomain.com; rewrite ^(.*)$ $scheme://www.mydomain.com$1 permanent;
但是如果收到一個 POST 請求,它會被重定向為 GET。
為什麼?重定向這個的正確方法是什麼?
發生這種情況是因為 Web 瀏覽器將 POST 請求更改為 GET 請求。
根據 RFC 2616,瀏覽器不應該在收到 301 時更改請求方法,而是警告使用者並要求確認重新向新 URL 送出請求。不幸的是,我從未見過網路瀏覽器真正做到這一點。但這樣做的原因是為了保護使用者免受各種劫持情況的影響。
如果收到 301 狀態程式碼以響應 GET 或 HEAD 以外的請求,使用者代理不得自動重定向請求,除非使用者可以確認,因為這可能會改變發出請求的條件。
注意:當收到 301 狀態碼後自動重定向 POST 請求時,一些現有的 HTTP/1.0 使用者代理會錯誤地將其更改為 GET 請求。
快速簡便的解決方法是修復您的 Web 應用程序,使其停止提供需要重定向的 URL。這也將提高您網站的整體性能和 SEO 排名。例如,如果您重定向
example.com
到,www.example.com
那麼您的 Web 應用程序提供的所有URL 都應該以www.example.com
.