Mod-Rewrite
mod_rewrite 在嘗試訪問 example.com 時重定向到 www.example.com//
我有一個 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 上都沒有前導斜杠。