RewriteRule显示不一致行为

时间:2014-12-03 11:33:18

标签: apache .htaccess mod-rewrite redirect

我的htaccess文件中有以下规则(这是完整的htaccess文件):

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(?!www\.).+$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST} [L,R=301]

使用htaccess测试仪(http://htaccess.madewithlove.be/),它显示非www URL被正确地重定向到www url(使用mydomain.com/和mydomain.com/subdirectory/进行测试(访问www.mydomain.com) /子目录/).

现在,当我将此htaccess文件放在我的网站上时,它会将mydomain.com/subdirectory/重定向到www.mydomain.com而不是www.mydomain.com/subdirectory /

为什么会出现这种不一致的行为?

2 个答案:

答案 0 :(得分:2)

您没有在目标中使用捕获值$1

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301,NE]

答案 1 :(得分:0)

所以,我查看了HTTP_HOST值实际上是什么。看起来它不包含任何域名扩展名(即domain.com但不包含任何内容),因此它将重定向到domain.com)

我将htaccess修改为以下版本,正在运行:

RewriteCond %{HTTP_HOST} ^(?!www\.).+$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

如果有人仍然有任何建议如何改进正则表达式,我可以提供改进