我有一个 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>
答案1
尝试一下这个:
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule (.*) http://www.example.com$1 [R=301,L]
答案2
问题是.*
包括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 上都没有前导斜杠。
答案3
您可以通过让指令的正则表达式部分“吃掉”它来轻松摆脱双重 /:
RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301,L]
答案4
我从来没有听说过霍克斯普协议。
您的虚拟主机回答 example.com 和万维网.example.com 请求。
修复很简单:为 www.example.com 添加一个单独的虚拟主机,并从 example.com 中删除 ServerAlias。
然后重定向永久/http://www.example.com/
请注意源和目标上斜线的普遍性 - 这是您所犯的错误。
我不会向您展示如何修复重写规则,因为您不应该使用它。