https://example.com使用mod_rewrite重定向到错误的网址

时间:2017-07-12 17:38:09

标签: apache .htaccess

所以我在使用.htaccess文件时遇到了麻烦。这是我的代码:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

它首先从非www重定向到www,然后从非https重定向到https但是它有问题,当转到:

https://example.com 

即:使用https而不是www,它会将我重定向到一个巨大的链接,例如:

https://www.example.com/home/c3238912/public_html/httpss://www.example.com/home/c3238912/public_html/httpss://www.example.com/home/c3238912/public_html/httpss://www.example.com/home/c3238912/public_html/

怎么可能这样呢?

2 个答案:

答案 0 :(得分:0)

您是否复制了https重定向中的s但忘了在此处提及?

您的示例在重定向路径中显示httpss。这样的拼写错误会导致此问题,因为httpss协议不存在,它被视为路径,因此无限重定向。

我的理解是你真正的规则是:

RewriteRule ^(.*)$ httpss://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

删除额外的s,就像您在问题中显示一样。 如果你之前有过拼写错误,但要更正它,请确保清空缓存。重定向 缓存。

答案 1 :(得分:0)

在我看来,它正在多次运行你的第二个Redirect。您可以连接它们,而不是将规则拆分,这样可以帮助修复多个重定向。

尝试使用:

RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]

我已将R标志更改为302,这使其成为临时重定向以进行测试。如果您发现此规则有效,则将其更改回301以进行永久重定向。

确保在测试之前清除缓存。