这个问题已经被问过了,但我找不到解决方案。我对 Apache 的经验很少。我需要设置我的服务器来接收以下请求
http://, http://www. and https:// and convert them to https://www.
到目前为止,这就是我所拥有的,并且可以正常工作。
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
但是,当我输入时,它会在网址前面添加一个额外的 www。http://www.domain.com(所以最终在 URL 中看起来像这样https://www.www.domain.com)。我需要做什么才能让它正常工作?而且,我将其放在全局配置编辑配置文件 httpd.conf 中。这是正确的地方吗?看起来我可以将其放在虚拟主机编辑指令文件中,但我不确定?再说一次,我对 apache 还很陌生。感谢您的帮助。
答案1
这将有效
RewriteEngine on
# redirect all http -> https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([a-z.]+)$ [NC]
RewriteRule ^/(.*)$ https://www.%1/$1 [R=301,L]
第一部分是您所拥有的,适用于 http->https
下一部分
第一行将忽略 www,第二行将忽略他们是否输入 ip 地址(如果需要,可以删除),第三行执行重定向。
答案2
这应该可以解决两个问题:你可以将其放在 .htaccess 或 httpd.conf 中
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>