我正在運行 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]
請告訴我是否有效。
奧利維爾