インターネット上のどこかで古いサイトへの古いリンクを見つけて、リンクが存在しない新しいサイトと古いページである間にそのリンクをたどると、ブラウザで何が得られますか?
404NotFoundを取得します。
古いページがドメインのルートに開かれていない場合、これらの古いリンクからリダイレクトなどを行うにはどうすればよいですか?
すべての古いページから同等の新しいページへの301リダイレクトを作成する必要があります。mod_aliasを使用してそれを行うことができます:
RedirectMatch 301 ^/old_page/(.*)$ /new_page/$1
またはmod_rewrite:
RewriteRule ^old_page/(.*)$ /new_page/$1 [L,R=301]
明らかに、特定のニーズに合わせて一致する式とターゲットを調整する必要があります。リダイレクトが必要な個々のURLが多数ある場合は、RewriteMapの作成を検討することをお勧めします。
その場合のGoogleはどうですか?PRを失い、古いページのPRの重みをメインドメインにリダイレクトしないようにするにはどうすればよいですか?
301リダイレクト(302ではなく永続的なリダイレクト、一時的なリダイレクト)を使用している限り、Googleのページランキングは新しいURLに転送されます。
この状況でmod_aliasまたはmod_rewriteを使用する方がよい理由とその理由は何ですか?
どちらでも構いませんが、mod_rewriteにはさらに多くのオプションがあり、マップの書き換えが可能です。ただし、単純なことをしている場合は、mod_aliasで問題ありません。
ここでも301と302で同じですが、ここで使用する方がよいでしょうか。
ここに301が必要です。これは、「リクエストしたリソースは現在ここにありませんが、当面はここにあります」という意味の302とは対照的に、「リクエストしたリソースは永久にここに移動しました」という意味です。また、302リダイレクトのみを実行した場合、Googleはページランクを新しいページに転送しません。これは、一時的なリダイレクトのみを目的としているためです。ページが永続的に新しいURLに移動したときではありません。
そして最後に、domain.tld / index.php?id = 77のような古いページを調べたところ、このルールRewriteRule ^index.php?id=(*)$ / [L,R=301]
は、ルートするID番号に対して正しいのでしょうか。
このルールは機能しません。のクエリ文字列(?id =部分)と照合することはできません。RewriteCond (*) `と照合RewriteRule
するだけでは、おそらく必要なものではありません。%{QUERY_STRING} var in a
. Also
/index.php?id=N
これにより、Nが任意の数値であるリクエストはすべてドキュメントルートにリダイレクトされます。
RewriteCond %{QUERY_STRING} ^id=([0-9]+)
RewriteRule ^index.php$ / [L,R=301]