Mod-Rewrite

mod_rewrite 在嘗試訪問 example.com 時重定向到 www.example.com//

  • January 20, 2012

我有一個 VPS,我正在嘗試在其上設置多個網站。對於其中一個,使用目前的規則集(如下),訪問

hxxp://example.com 

送我到

hxxp://www.example.com// [note the two //]

我的 httpd.conf 看起來像:

NameVirtualHost *:80

[other VirtualHosts]

<VirtualHost *:80>
ServerAlias www.example.com example.com
DocumentRoot /var/www/html/example.com
ServerName www.example.com

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

<directory /var/www/html/example.com>

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^([0-9]+)(.*)/?$ /showitem.php?j=$1 [NC]

</directory>
</VirtualHost>

試試這個:

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

問題是.* 包括URL 中已經存在的斜杠。然後,您發送一個重定向,http://www.example.com/$1其中包含另一個斜杠。

以下其中一項將解決您的問題:

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

或者

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

這不會發生在<Directory >塊或.htaccess文件中,因為在這兩種情況下,URI 上都沒有前導斜杠。

引用自:https://serverfault.com/questions/351880