我有一个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/
请注意源代码和目标文件中斜线的普遍性 – 这是您犯的错误。
我不会告诉你如何解决这个问题,因为你不应该使用它。