web-dev-qa-db-ja.com

サイトに複数のドメインがある場合の.htaccessの書き換え

私が持っている大学クラブのウェブサイトを運営しています  3つの(更新:最近3番目に発見しました)ドメイン、たとえばwww.meow.co.ukfoo.uni.ac.uk/bar/meow/およびuni.ac.uk/bar/meowとしましょう。ページから ".html"を削除するために、フォルダー.htaccessで次のfoo.uni.ac.uk/bar/meow/を使用しています。

#meow.co.uk/page will display the contents of meow.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

#302 from meow.co.uk/page.html to meow.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=302,L]

これはwww.meow.co.uk/page.html --> www.meow.co.uk/pageで正常に機能しますが、他のドメインでは、foo.uni.ac.uk/をルートディレクトリとして扱うため、foo.uni.ac.uk/bar/meow/page.html --> foo.uni.ac.uk/pageです。 --> foo.uni.ac.uk/bar/meow/pageに行きたいです。

Htaccessファイルを変更して、両方のドメインで機能するようにするにはどうすればよいですか?またはfoo.uni.ac.uk/bar/meowからwww.meow.co.ukにリダイレクトするにはどうすればいいですか?

4
binaryfunt

RewriteRule ^(.*)\.html$ /$1 [R=302,L]

問題は、www.meow.co.ukの場合は/$1にリダイレクトする必要があり(上記のとおり)、foo.uni.ac.ukの場合は/bar/meow/$1にリダイレクトする必要があることです。私はそれをすぐに回避できる方法はないと思います。

ただし、Hostの値に応じて、リダイレクトに必要なベースURLの値に環境変数(たとえばBASE_URL)を条件付きで設定できます。そして、RewriteRuleディレクティブでこの環境変数を使用します。

たとえば、スクリプトの上部で、環境変数を設定します。

SetEnvIf Host "foo\.uni\.ac\.uk" BASE_URL=/bar/meow

www.meow.co.uk経由でサイトにアクセスすると、BASE_URLは設定されません(つまり、空になります)。

次に、これを使用するようにRewriteRule置換を変更します。

RewriteRule ^(.*)\.html$ %{ENV:BASE_URL}/$1 [R=302,L]

302(一時的な)リダイレクトを301(永続的な)リダイレクトに変更する必要があります。それが正常に機能していることを確認したら、変更する必要があります。


PDATE:ただし、URLを正規化し、正規ドメイン(つまり、www.meow.co.uk)にリダイレクトする方が適切です。 3つの異なるドメインを使用すると、多くの潜在的な重複コンテンツがあります。したがって、上記の代わりに、スクリプトの上部にある正規のドメインに単純にリダイレクトします。

RewriteCond %{HTTP_Host} !=www.meow.co.uk [NC]
RewriteRule ^bar/meow/(.*) http://www.meow.co.uk/$1 [R=301,L]

明確にするために...拡張子のないバージョンを使用するようにサイトのURLを既に変更しており、このリダイレクトは、インデックス付け、共有などされた可能性のある古いURLにのみ必要です。

2
MrWhite