我正在尝试将HTTP和HTTPS请求的www重定向到非www。我的根.htaccess如下所示:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^(.*)$ http://example.com/$1 [R=301]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteCond %{SERVER_PORT} ^443
RewriteRule ^(.*)$ https://example.com/$1 [R=301]
这不能完全按预期工作。怎么了:
访问会http://www.example.com
导致重定向到http://example.com
。这表明我的第一个规则和条件正在工作,mod_rewite模块是hunky-dory并且.htaccess已启用。
访问https://www.example.com
不会导致重定向。我继续https://www.example.com
我的问题
为了使上述重写规则生效,我的服务器必须具有SSL证书吗?目前还没有,我想知道这是否是事情不起作用的原因。
第一条规则优先于https
请求,因为它完全满足重写条件。第一条规则基本上告诉您匹配域,您就可以开始重写了。而是添加另一个条件,告知其是否未https
请求
所以试试这个:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteCond %{SERVER_PORT} !^443
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteCond %{SERVER_PORT} ^443
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
您需要ssl证书才能使https
协议正常工作
另外,我添加了[L]
标志,指示不要处理进一步的规则
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句