次のようなリンクがあります。
www.site.com/page.php?p=1
htaccessで分かりやすいURLに書き換える必要がある
RewriteRule ^home$ page.php?p=1
それは機能しますが、同じコンテンツを持つ 2 つのアクティブなリンクがあります。
古いリンクから新しいリンクに 301 リダイレクトを追加しようとしましたが、ループに陥りました。それを修正する方法はありますか?
次のようなリンクがあります。
www.site.com/page.php?p=1
htaccessで分かりやすいURLに書き換える必要がある
RewriteRule ^home$ page.php?p=1
それは機能しますが、同じコンテンツを持つ 2 つのアクティブなリンクがあります。
古いリンクから新しいリンクに 301 リダイレクトを追加しようとしましたが、ループに陥りました。それを修正する方法はありますか?
ルールがループしないように、実際のリクエストと照合してみてください。
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /page\.php\?p=1(&|\ |^)([^\ ]*)
RewriteRule ^page\.php$ /home?%3 [L,R=301]
# then your internal rewrite
RewriteRule ^home$ page.php?p=1
ページのリダイレクトを削除し、htaccess で処理します。
RewriteRule ^page\.php\?p=1$ /home [L,R=301]
これにより、/home にリダイレクトされ、現在のリダイレクト ループが停止します。
私が見つけたこれらの状況でのループを防ぐもう 1 つの手っ取り早い方法は、クエリ文字列を追加し、リダイレクトでその存在を確認することです。
RewriteCond %{QUERY_STRING} ^p=1
RewriteCond %{QUERY_STRING} !foo=bar
RewriteRule ^page\.php$ /home [NC,R=301,L]
RewriteRule ^home$ page.php?p=1&foo=bar [NC,L]
このサイトにあります: http://answers.oreilly.com/topic/542-how-to-properly-redirect-for-maximum-seo/