Nginx

為什麼 nginx 在重寫規則上更改 HTTP 方法?

  • May 23, 2014

每當我在 上收到請求時,我都會使用以下重寫規則mydomain.com將其重定向到子域:www

server_name mydomain.com;
rewrite ^(.*)$ $scheme://www.mydomain.com$1 permanent;

但是如果收到一個 POST 請求,它會被重定向為 GET。

為什麼?重定向這個的正確方法是什麼?

發生這種情況是因為 Web 瀏覽器將 POST 請求更改為 GET 請求。

根據 RFC 2616,瀏覽器不應該在收到 301 時更改請求方法,而是警告使用者並要求確認重新向新 URL 送出請求。不幸的是,我從未見過網路瀏覽器真正做到這一點。但這樣做的原因是為了保護使用者免受各種劫持情況的影響。

請參閱第 10.3.2 節

如果收到 301 狀態程式碼以響應 GET 或 HEAD 以外的請求,使用者代理不得自動重定向請求,除非使用者可以確認,因為這可能會改變發出請求的條件。

注意:當收到 301 狀態碼後自動重定向 POST 請求時,一些現有的 HTTP/1.0 使用者代理會錯誤地將其更改為 GET 請求。

快速簡便的解決方法是修復您的 Web 應用程序,使其停止提供需要重定向的 URL。這也將提高您網站的整體性能和 SEO 排名。例如,如果您重定向example.com到,www.example.com那麼您的 Web 應用程序提供的所有URL 都應該以www.example.com.

引用自:https://serverfault.com/questions/480052