对我来说不起作用。我做错了什么,我得到了可怕的重定向过多错误。我试图将所有网址强制为 WWW 和 https,但我只满足于能够强制所有内容为 https
RewriteEngine on
RewriteBase /
RewriteCond %{http_host} ^all-service-musical.com [nc]
RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301,nc]
RewriteCond %{http_host} ^asmusic.org [nc]
RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301]
RewriteCond %{http_host} ^www.all-service-musical.com [nc]
RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301,nc]
前两个规则一起工作得很好,但第三个规则试图将 www url 更改为 https 却破坏了整个规则....有什么想法吗?
我还尝试删除上述所有代码,并尝试使用以下命令完成 http 到 https 部分任务:
RewriteEngine On
#RewriteCond %{HTTPS} off
#RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
当使用上述方法时,我也遇到了过多重定向错误。
我也单独尝试过这个:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://all-service-musical.com/$1 [R,L]
同样的结果...由于过多的重定向错误导致网站崩溃。
MrWhite...谢谢您抽出时间回答,htaccess 文件中当前的代码是:
RewriteEngine on
RewriteBase /
RewriteCond %{http_host} ^www.all-service-musical.com [nc]
RewriteRule ^(.*)$ https://all-service-musical.com/$1 [r=301,nc]
RewriteCond %{http_host} ^asmusic.org [nc]
RewriteRule ^(.*)$ https://all-service-musical.com/$1 [r=301]
RewriteCond %{http_host} ^www.asmusic.org [nc]
RewriteRule ^(.*)$ https://all-service-musical.com/$1 [r=301]
由于该证书适用于 all-service-musical.com(我开始怀疑这样设置是否是托管公司给出的错误建议),我想我会尝试重写代码,以便非 WWW 版本成为目标,但是我仍然有同样的问题,当我在地址栏中输入 all-service-musical.com 时,它显示为不安全的,当我拥有最初发布的代码时,直接输入 WWW 版本会显示为不安全的。
我不得不认为您提供的这段代码:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=302,L]
如果删除所有其他内容,则在一定程度上应该可以自行运行,但即使它是 htaccess 文件中唯一的东西,它也会因过多的重定向错误而破坏网站。
我非常喜欢并感谢您的建议,在找到正确的代码之前,我建议使用 302 重定向。如果您能就我的问题所在提供进一步的建议,我将不胜感激。
答案1
如果在尝试所有这些指令时持续出现重定向循环,请清除浏览器缓存。全部这些不应该触发重定向循环。出于这个原因,建议使用 302(临时)重定向进行测试,并且只有当您确定它们正常工作时才更改为 301(永久)。
RewriteCond %{http_host} ^all-service-musical.com [nc] RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301,nc] RewriteCond %{http_host} ^asmusic.org [nc] RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301] RewriteCond %{http_host} ^www.all-service-musical.com [nc] RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301,nc]
您的前三个RewriteRule
指令都缺少L
标志,因此处理将继续到下一个规则等。您的第三条规则尝试“将 www 网址更改为 https”,这肯定会导致重定向循环,因为您只是重定向到其自身。要从 HTTP 重定向到 HTTPS,您需要首先检查 HTTP(即HTTPS
is off
),就像您在后面的尝试中所做的那样。
RewriteEngine On #RewriteCond %{HTTPS} off #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
您的第四条规则重定向到同一主机上的 HTTPS - 这可能是一个好主意,只要您的不同域(您只有两个吗?)都安装了安全证书。
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://all-service-musical.com/$1 [R,L]
这是重定向到域名顶点,而不是 www 子域名(与前三条规则相反)。如果网站代码本身发出了到规范主机的重定向,则可能会导致重定向循环。
假设:
- 您有一个单一的规范主机名
www.all-service-musical.com
,所有其他域都重定向到该主机名。 - SSL 证书直接安装在您的应用程序服务器上,不由前端代理管理。
- 您没有实施 HSTS。(如果实施,则需要先在同一主机上重定向到 HTTPS,并确保在每个域上都安装了 SSL 证书。)
请尝试在文件顶部附近执行以下操作.htaccess
:
RewriteEngine On
# Redirect non-canoncial hostname
RewriteCond %{HTTP_HOST} !^www\.all-service-musical\.com$
RewriteRule (.*) https://www.all-service-musical.com/$1 [R=302,L]
# Redirect to HTTPS
# NB: This only applies if the canonical hostname is requested over HTTP
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=302,L]
如上所述,只有在确认其正常运行后才将 302 更改为 301 - 以避免浏览器缓存出现问题。