4

これが私がこれまでに持っているものです:

#Force www.
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

#Remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} (.*)$
RewriteRule ^(.+)/$ http://www.domain.com/$1 [R=301,L]

ただし、これにより、次のリダイレクトを行うすべてのサブドメインが台無しになります。

sub.domain.com -> www.sub.domain.com

また、末尾のスラッシュの削除ビットに書き込まれたドメインに依存します。

それで... 2つの質問です。

「末尾のスラッシュを削除」ビットのルールを書き換えて、ドメインの書き込みを除外するにはどうすればよいですか?

サブドメインを明示的に書き留めずに、rewritecond を作成して「force www.」少し?

望ましい結果の例 -

sub.domain.com/something/ -> sub.domain.com/something
domain.com/something/ -> www.domain.com/something
www.domain.com/ -> www.domain.com
sub.domain.com -> sub.domain.com

ありがとう!

4

1 に答える 1

7

www を変更して、実際のドメインを確認します。

#Force www.
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

または、多数のドメインをホストしている場合は、TLD の前に名前を確認できます。

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^([^.]+)\.([a-z]{2,4})$ [NC]
RewriteRule ^ http://www.%1.%2%{REQUEST_URI} [L,R=301]

末尾のスラッシュについては、要求がディレクトリに対して行われていないことに注意する必要があります。それが有効で、オンになっている場合DirectorySlash(デフォルトではオンになっている)、リダイレクト ループが発生するためです。

サブドメインを除外するために、最初のルールがブラウザをリダイレクトして「www」で始まることを確認したと仮定します。サブドメインは「www」で始まるようにリダイレクトされていないため、それを確認するだけで済みます。

#Remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.+)/$ /$1 [R=301,L]
于 2013-03-01T22:12:56.043 に答える