Apache:将所有请求重定向到https://www.domain.tld

时间:2017-06-04 19:55:37

标签: http web https url-redirection no-www

我无法找到适合我的解决方案。

这是我的设置:

# 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,则忽略它。 有人知道解决方案吗?

提前致谢。

1 个答案:

答案 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-wwwwww,则可能会在服务器上设置的其他地方(可能在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中设置,则可以覆盖.htaccessnon-wwwwww的重写。