私が持っている大学クラブのウェブサイトを運営しています 二 3つの(更新:最近3番目に発見しました)ドメイン、たとえばwww.meow.co.uk
、foo.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
にリダイレクトするにはどうすればいいですか?
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にのみ必要です。