古いページの.htaccess
には301個のリダイレクトがあります。
しかし、長年私を悩ませてきた問題は、私の古いインデックスページ(index.html
)へのリンクがたくさんあることです。リンクジュースなどを保存するために、それらを新しいindex.php
にリダイレクトします(それでも動作する場合は?)
問題は、index.html
からindex.php
へのリダイレクトを行う場合、動作しますfineメインのWebサイトでは... but同じサーバー上のサブフォルダーから実行されている他のWebサイト(個別のURL)。他のすべてのWebサイトのインデックスページもメインのページにリダイレクトします。
他のサイトに影響を与えずに、メインドメインのインデックスページのみに影響するリダイレクトを作成するにはどうすればよいですか?私の明白な最初の考えは、2つの絶対URLを使用することでしたが、どうやらそれはノーですか?
「他のウェブサイト」が異なるドメイン/ホストを使用している場合、リダイレクトする前にHTTP_Host
を確認できます。標準的なwwwリダイレクトの場合と同じです。
ただし、これにはmod_rewriteの使用が必要です。 example.com
がメインドメインであると仮定すると、次のようなことができます。
RewriteEngine On
RewriteCond %{HTTP_Host} ^(www\.)?example\.com [NC]
RewriteRule ^index\.html$ / [R=301,L]
これは... /index.html
に一致するすべてのリクエストで、Hostがexample.com
(またはwww.example.com
)に一致してから、301がexample.com/
にリダイレクトします。 (またはwww.example.com/
)。
これは単に/
にリダイレクトし、mod_dirが必要なDirectoryIndex
(つまりindex.php
)をフェッチできることに注意してください。本当に明示的にindex.php
にリダイレクトしたい場合(それが現在行っていることでない限り推奨されません)、完全なsubstitution/index.php
を含めます。
正規リダイレクトが設定されている場合、(www\.)?
(wwwをオプションにする)は不要です。
現在、mod_aliasの一部であるRedirect
(またはRedirectMatch
)を使用している場合は、これらをmod_rewriteに変換するのが理想的です。それ以外の場合は、競合に注意してください。 mod_aliasは、.htaccess
のディレクティブの見かけの順序にかかわらず、after mod_rewriteを実行します。
私の明白な最初の考えは、2つの絶対URLを使用することでしたが、どうやらそれはノーですか?
関連するApacheディレクティブが絶対URLをsourceとして指定することを許可しない限り、これは「ノー」です。 URLパスのみを想定しています。ソースURLのHost部分は分離されます。ただし、絶対的なtarget URL(またはmod_rewrite用語ではsubstitution)は完全に問題ありません。
...サブフォルダーから実行されている他のWebサイト(個別のURL)
メインドメイン以外のsubdirectoriesで個別のWebサイトを実行することは、密接に関連していない限り理想的ではありません。 .htaccess
ファイルはファイルシステムパスに沿って継承されるため、競合が発生する可能性があります。