我正在尝试为客户端站点设置从 HTTP 到 HTTPS 的重定向。我将以下代码添加到 .htaccess 文件中:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
但是这样做会让用户在访问网站上的 HTTP 页面时看到 302“Found”页面,而不是将他们重定向到 HTTPS 版本。
我试图找出为什么会发生这种情况,以及如何解决问题以获得预期的结果。该网站已经强制使用了
www
子域 - 这可能会导致该问题..?
在 Ubuntu 服务器上使用 apache。
这听起来像是您与其他指令发生冲突。您的规则中缺少
L
标志,因此处理将继续通过文件而不是触发立即重定向。
您还应该明确并包含
R
标志,当将其更改为 301(永久)重定向时,您需要执行此操作。
另请注意,此规则必须位于文件顶部附近在任何现有重写之前。
例如:
:
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
我将 pattern 从
(.*)
更改为 ^
,这样效率更高,因为您没有在 substitution 中使用反向引用。