web-dev-qa-db-ja.com

Apache 301リダイレクトおよび投稿データの保存

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

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

これまでのところ解決策が見つからないため、書き換えからpostメソッドを除外しようとしました-最悪の場合、postメソッドに古いタイプのURLを使用できます。

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

ありがとう

24
Daniel Cook

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

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

1つのオプションは、POSTリダイレクトされるURLへのリクエストをキャッチし、リダイレクトを処理するためにページに渡す。コード内のパラメーターの転置を実行してから、新しいURLをそのように追加したパラメーターでヘッダーをリダイレクトします。

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

POST次のGETリソースに転置されたフォームリダイレクトを言う:

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

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

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

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

22
Ray

を使って 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

- ウィキペディア

53
Hashbrown

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

TuckeyのURLrewriteFilterやApache mod_rewrite

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

0
marc82ch