尝试访问example.com时,mod_rewriteredirect到www.example.com

我有一个VPS,我试图build立多个网站。 对于其中的一个,按照当前的一组规则(如下)访问

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中的斜杠。 然后,您将redirect发送到包含另一个斜杠的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上都没有前导斜杠。

你可以很容易地摆脱这个双重/让正则expression式部分的指令“吃”它:

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

我从来没有听说过hxxp协议。

您的虚拟主机同时响应example.com和www .example.com请求。

修复很简单:为www.example.com添加一个单独的vhost,并从example.com中删除ServerAlias。

然后redirect永久/ http://www.example.com/

请注意源代码和目标文件中斜线的普遍性 – 这是您犯的错误。

我不会告诉你如何解决这个问题,因为你不应该使用它。