我无法找到适合我的解决方案。
这是我的设置:
# Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# Redirect http to https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
每个部分都能很好地工作但不能在一起工作。 https重定向的部分始终重定向到https://domain.tld,因此如果没有www,则忽略它。 有人知道解决方案吗?
提前致谢。
答案 0 :(得分:0)
强制HTTPS
并加入WWW
:
RewriteEngine On
RewriteCond %{HTTP_HOST}#%{HTTPS}s !^www\.([^#]+)#(?:off|on(s)) [NC]
RewriteRule ^$ http%2://www.%1%{REQUEST_URI} [R=301,L]
一次性完成这两项工作,否则你可以将规则分开,也可以这样分开:
# Rewrite to WWW
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*) https://www.%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
# Rewrite HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
如果重写不适用于non-www
到www
,则可能会在服务器上设置的其他地方(可能在httpd.conf
)重定向VirtualHost 301 ...看起来与此类似:
<强>的httpd.conf 强>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com$1 [L,R=301]
</IfModule>
如果在httpd.conf
中设置,则可以覆盖.htaccess
中non-www
到www
的重写。