web-dev-qa-db-ja.com

mod_rewriteとダブルスラッシュの問題

mod_rewriteに次のApache2ルールを適用して、www以外からwwwにリダイレクトしました。

RewriteEngine On
RewriteCond %{HTTP_Host} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

2つの質問があります:

1)ダブルスラッシュの問題があります:

それを修正するためのヒントはありますか?

2)私の構成はSEOに適していますか?

17
Mark

修正済み:

RewriteEngine On
RewriteCond %{HTTP_Host} ^mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com$1 [R=301,L]

なぜなら$1デフォルトにはインデックスパスが含まれています/

33
Mark
 RewriteRule ^\/?(。*)$ http://www.mydomain.com/$1 [R = 301、L] 
20
Rahly

実際には、次の理由で常に二重スラッシュがあります

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

rEQUEST_URI(一致している)には通常、開始スラッシュが含まれているという事実と組み合わされます。試すことができるのはRewriteRule ^(.*)$ http://mydomain.com$1で、壊れたHTTPリクエストを送信しますGET foo HTTP/1.0そしてApacheがそれを適切に処理するかどうかを確認します。

6
user502515

パターンにスラッシュを入れると、この問題が解決するはずです。

RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301,L]
2
Dennis Winter

これは、ルートパスが/であり、RewriteRuleで取得したものをすべて追加しているためです(最初のケースはが機能しないため条件に一致するため、書き換えは実行されません)。

あなたはこのようなことを試すことができます:

RewriteEngine On
RewriteCond %{HTTP_Host} ^mydomain\.com$ [NC]
# for the home page
RewriteRule ^/$ http://www.mydomain.com/ [R=301,L]
# for the rest of pages
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
1