我的.htaccess文件中有这个:
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com$1 [R=301,L]
但每当我访问根目录下的文件,比如http://example.com/robots.txt,它就会重定向到http://www.example.comrobots.txt/。
我如何纠正这一点,使它将正确重定向到http://www.example.com/robots.txt?
更改您的配置如下(添加斜杠):
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
或者下面概述的解决方案(由@absiddiqueLive提出)将适用于任何域:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
如果您需要支持http和https并保留协议选择,请尝试以下操作:
RewriteRule ^login\$ https://www.%{HTTP_HOST}/login [R=301,L]
你用checkout。php或者任何你需要支持HTTPS的URL替换login。
但我认为这不是一个好主意。关于推理,请阅读下面的答案。
我相信顶部的答案成功地重定向非www到www(例如:mysite.com -> www.mysite.com),但不考虑通配符子域,这导致:
random.mysite.com -> www.random.mysite.com
这里有一个有/没有HTTPS的解决方案
HTTP
RewriteEngine On
RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ http%{ENV:protossl}://www.mysite.com/$1 [L,R=301]
使用HTTP / HTTPS
RewriteEngine On
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=protocol:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=protocol:http]
RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ %{ENV:protocol}://www.mysite.com/$1 [L,R=301]
*注:我还没有测试https,因为我目前没有一个证书来测试,但如果有人可以验证或优化我所拥有的,那就太棒了。
更改您的配置如下(添加斜杠):
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
或者下面概述的解决方案(由@absiddiqueLive提出)将适用于任何域:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
如果您需要支持http和https并保留协议选择,请尝试以下操作:
RewriteRule ^login\$ https://www.%{HTTP_HOST}/login [R=301,L]
你用checkout。php或者任何你需要支持HTTPS的URL替换login。
但我认为这不是一个好主意。关于推理,请阅读下面的答案。