2012-02-15 14 views
2

Apacheのリダイレクトには少し問題があります。 サイト内の任意のページに対して蛇行ルールが機能しますが、mydomain.comはmydomain.com//にリダイレクトされ、後続のスラッシュ除去ルールは無視されます。wwwからwwwにリダイレクトしても、バックスラッシュは削除されません。

また、このような複数のルールを使用するのが効率的ですか、それらを組み合わせたり、何らかの形で連鎖しようとすると、単一のURLの複数のリダイレクトが回避されますか?あなたが書き換えルールのターゲットに「/」余分を持っているので

おかげ

#Turn on options for url rewriting 
     Options +FollowSymlinks 
     RewriteEngine on 

#lovercase all urls 
     RewriteMap lc int:tolower 
     RewriteCond %{REQUEST_URI} [A-Z] 
     RewriteCond %{REQUEST_URI} ^/fonts/.* 
     RewriteCond %{REQUEST_URI} ^/css/.* 
     RewriteCond %{REQUEST_URI} ^/js/.* 
     RewriteRule (.*) ${lc:$1} [R=301,L] 

#redirect all requests made to http:// to http://www. 
     RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC] 
     RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L] 

#removes trailing slash 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteCond %{HTTP_HOST} !^\.localhost$ [NC] 
     RewriteRule ^(.+)/$ http://%{HTTP_HOST}$1 [R=301,L] 
+0

にリダイレクトされないようにする必要がありますか? –

+0

メインの設定ファイルにあります。 –

答えて

4

mydomain.comwww.mydomain.com//にリダイレクトされます理由は次のとおりです。

RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L] 
              ^----here 

あなたはあなたのサーバーでルールを持っている場合は/ vhostの設定ではスラッシュは削除されないので、一致して逆参照として使用されるのでmydomain.com^(.*)$と一致し、http://www.mydomain.com//に一致する/です。だから、どちらかのターゲットにスラッシュを削除するか、正規表現に1を追加することができます

RewriteRule ^(.*)$ http://www.mydomain.com$1 [R=301,L] 
or 
RewriteRule ^/(.*)$ http://www.mydomain.com/$1 [R=301,L] 

あなたの他のルールは、あなたが持っている:

 RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{HTTP_HOST} !^\.localhost$ [NC] 
    RewriteRule ^(.+)/$ http://%{HTTP_HOST}$1 [R=301,L] 

は大丈夫です。スラッシュの間に何かがある場合、スラッシュを削除するためのものです。 (.+)のため、/something/です。それは本質的にちょうど/に変わるので、とにかく//と一致しません。 .htaccessファイルまたはserver/vhost設定のこれらの規則はhttp://www.mydomain.com//

+0

ありがとう、それは完全に動作しています。 悲しいことに、私はまだここではまだ新しいので、あなたに多くの投票権を与えることはできません。 T_T –

関連する問題