我正在尝试设置从www到非www页面的重定向。我发现了很多指导,但我缺少一些东西。来自www和非www的Tracerout是相同的,它正在命中我的服务器,因此DNS被保存。
这是我的apache2 conf文件:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mypage.com
ServerAlias www.mypage.com
DocumentRoot /var/www/mypage
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/mypage>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这是我的.htaccess文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>
谁能看到我想念的东西吗?
答案 0 :(得分:0)
将www重定向到非www的规则可能不起作用的原因是,它发生在带有L
标志的其他规则之后(这当然意味着停止处理重写规则)。您可能会考虑以下配置,该配置将特定部分放在首位:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /index.php [L]
</IfModule>
我想在这里注意几件事。
RewriteBase
指令是不必要的,除非htaccess文件不在文档根目录中。RewriteRule
可以使用%{REQUEST_URI}
变量,只需重写整个请求即可。/index.php
,则可以使用^
字符。