从www重定向到非www不起作用

时间:2019-06-21 19:32:57

标签: wordpress .htaccess web redirect

我正在尝试设置从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>

谁能看到我想念的东西吗?

1 个答案:

答案 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文件不在文档根目录中。
  • 非www的RewriteRule可以使用%{REQUEST_URI}变量,只需重写整个请求即可。
  • 假设您打算按照最后一条规则将整个URI重写为/index.php,则可以使用^字符。