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 將被寫入http://aaronjwood.com//(注意兩個斜線)或http://aaronjwood.com//contact.php。誰能幫我弄清楚為什麼會發生這種事?

答案1

由於它位於您的主設定檔中,而不是每個目錄(<Directory>.htaccess)中,因此不會為上下文刪除前導斜線。它實際上是在每次重寫中添加(或嘗試添加 - 不確定 Apache 是否在大多數情況下刪除了額外的內容,或者客戶端瀏覽器是否刪除了)第二個斜杠。

只需考慮到前導斜線包含在您要匹配的字串中:

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

答案2

由於它直接位於虛擬主機中,因此解決方案如下:刪除此處的斜杠:http://aaronjwood.com$1

另一個提示:單獨時,^(.*)$與 相同(.*)

所以這是解決方案:

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

請告訴我是否有效。

奧利維爾

相關內容