Apache .htaccess RewriteRule在将非www重定向到www url时不包括子目录

时间:2016-09-19 14:46:58

标签: apache .htaccess url-rewriting

我已设置重写规则,以便使用以下规则将domain.com流量定向到www.domain.com

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{HTTP_HOST} !^www\. [NC]
  RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

根据我的有限理解,$1中的RewriteRule应与domain.com/之后的任何内容匹配,然后放在我重写的网址www.domain.com/的末尾。

例如domain.com/abc应该变为www.domain.com/abc

然而,无效。如果我浏览到domain.com/abc,则根本不会重写此路径,而我只是domain.com/abc而没有www

根据我的理解,我已经做了很多阅读,只是为了弄清$1应该照顾这个。

任何人都可以解释为什么它不起作用,因为我怀疑它应该是?感谢。

1 个答案:

答案 0 :(得分:0)

事实证明,因为我使用的是Wordpress和W3 Cache插件,所以我只是将代码放在我的.htaccess文件的错误位置。

代码应放在# BEGIN Wordpress代码块中,并且在Wordpress已有的现有规则之前。

现有代码应如下所示:

# BEGIN Wordpress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
#END Wordpress

我将原始代码添加到此处,如下所示:

# BEGIN Wordpress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
#END Wordpress

这解决了我上面描述的问题。感谢评论员激发了我的思考过程。