同じページへの 301 リダイレクトを行うサーバー エンドポイントへの AJAX 呼び出しがありますが、末尾にスラッシュがあります。
ブラウザーは、AJAX で呼び出されたときにリダイレクトに従いますか、それとも無視しますか? 私の場合はそれらに従っていませんが、サーバー構成からのものである可能性があると考えました。
たぶん、この回答は少し遅れていますが、ajax リクエストに対する 301 レスポンスで同じ問題が発生しました。解決策は非常に簡単でした:
Apacheの書き換えルールは次のようなものです:
RewriteRule ^([^/]\w+)/?$ index.php?%{QUERY_STRING} [L,E=MODULE:$1]
XHR-Request URL は次のようになります。
/this/is/a/canonical/url + '?param=1¶m=2...'
直接ファイル呼び出し (fi *.php) を使用せず、代わりに正規の URL (fi *.php のないディレクトリ パスのように見える) に書き換えると、301 が完全に移動されます。
この問題を解決するには、次のように / を XHR-Request-URL に追加するだけです。
/this/is/a/canonical/url + '/' + '?param=1¶m=2...'
多分これは誰かを助けるでしょう。
jquery を使用している場合は、以下の質問を参照して実装できます。デフォルトでは、jQuery (および Ajax を使用するほとんどのライブラリ)はデフォルトでリダイレクトに従いません。
jQuery Ajax 呼び出し後のリダイレクト要求を管理する方法
私もこの問題を抱えていて、末尾のスラッシュについての提案で考えさせられました... Web.Config にすべてを小文字にする書き換えルールがあり、それが私の AJAX 呼び出しを混乱させていました。私は GetResults (301 として表示された) に POST を行っていましたが、リライター (何らかの理由で不明) がそれを小文字の getresults GET に変更していたため、結果は 404 でした。
これが他の誰かに役立つことを願っています。