36

すべての URL 構築とコンテンツ配信を処理する Web サイトのルートにある「redirect.cfm」への Apache 301 リダイレクトを使用して、SEO URL を実装しました。

301 リダイレクト中に投稿データが失われます。

これまでのところ解決策を見つけることができず、書き直しからポスト メソッドを除外しようとしました。最悪の場合、ポスト メソッドに古いタイプの URL を使用する可能性があります。

できることはありますか?

ありがとう

4

3 に答える 3

72

を使用することは、まさにあなたが望むもの307でなければなりません

307 Temporary Redirect (since HTTP/1.1)
In this case, the request should be repeated with another URI; however, future requests
should still use the original URI.[2] In contrast to how 302 was historically implemented,
the request method is not allowed to be changed when reissuing the original request. For
instance, a POST request should be repeated using another POST request

-ウィキペディア

于 2014-02-17T05:10:54.653 に答える
32

2021年頃の更新 ここでの元の回答は、307ステータスコードのリダイレクトがブラウザー間で一貫して機能する前に書かれました。以下の Hashbrown の回答に従って、307ステータス コードを使用する必要があります。

クライアントが 301 で指定された URL に対して GET 要求を実行するため、古い回答 の POST データはリダイレクト時に破棄されます。

唯一のオプションは、POST パラメーターを GET パラメーターに変換し、リダイレクト先の URL の末尾に追加することです。これは、.htaccess ファイルの書き換えでは実行できません。

1 つのオプションは、リダイレクトする URL への POST リクエストをキャッチし、それをページに渡してリダイレクトを処理することです。コードでパラメーターの転置を行い、その方法で新しい URL をパラメーターに追加してリダイレクト ヘッダーを発行する必要があります。

更新: この回答へのコメントで指摘されているように、POST パラメーターを指定して別の URL にリダイレクトし、その URL にもパラメーターなしでアクセスする場合 (またはパラメーターが可変である場合)、ページの正規 URL へのリンクを指定する必要があります。 .

POST フォームのリダイレクトが次の GET リソースに置き換えられたとします。

   http://www.example.com/finalpage.php?form_data_1=123&form_data_2=666

このリンク レコードをページの head セクションに追加します。

   <link rel="canonical" href="http://www.example.com/finalpage.php" />

これにより、すべての SEO 値がhttp://www.example.com/finalpage.phpに与えられ、コンテンツの重複による問題が回避されます。

于 2012-11-29T15:18:27.007 に答える
-1

一般的な URL 書き換えに 301 リダイレクトを使用するのは適切ではありません。ページのリクエスト数が 2 倍になるため、これはパフォーマンスの問題です (特にモバイルの場合だけでなく、一般的にも)。

TuckeyURLrewriteFilterや apacheなどの URL 書き換えツールの使用を検討してくださいmod_rewrite

レイが言ったことはすべて真実です。これは、あなたの一般的なアプローチに対する追加のコメントです。

于 2013-06-19T12:19:43.417 に答える