我的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 /
为什么会出现这种不一致的行为?
答案 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]
如果有人仍然有任何建议如何改进正则表达式,我可以提供改进