Apache mod_rewrite が URL の末尾に余分なスラッシュを追加する

Apache mod_rewrite が URL の末尾に余分なスラッシュを追加する

CentOS 6.0 を実行しており、mod_rewrite で www がプレフィックスとして付いた URL から www を削除しようとしています。httpd.conf にあるコードは次のとおりです。

注記:私は完全なルートアクセス権を持つ VPS を使用しているため、.htaccess ファイルや「ディレクトリごと」の設定は使用していません。

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

これは、URLが書き込まれることを除いて、すべてのページで正常に機能します。アーロン・ウッド(2つのスラッシュに注意してください)またはhttp://aaronjwood.com//contact.phpなぜこのようなことが起こるのか、誰か教えてくれませんか?

答え1

これはメインの設定ファイルにあり、ディレクトリごと (<Directory>または.htaccess) ではないため、先頭のスラッシュはコンテキストのために削除されません。実際には、すべての書き換えに 2 番目のスラッシュが追加されます (または追加しようとします - ほとんどの場合、Apache が余分なスラッシュを削除しているのか、クライアント ブラウザーが削除しているのかはわかりません)。

一致させる文字列に先頭のスラッシュが含まれているという事実を考慮するだけです。

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

答え2

これは直接 vhost 内にあるため、解決策は次のとおりです。ここでスラッシュを削除します。http://aaronjwood.com$1

もう一つのヒント: 単独の場合、^(.*)$は と同じです(.*)

解決策は次のとおりです。

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

うまくいったかどうか教えてください。

オリヴィエ

関連情報