.htaccess 未将所有请求重定向到 HTTPS

.htaccess 未将所有请求重定向到 HTTPS

我将以下内容设置为develop.metrolansing.com的.htaccess文件:

RewriteEngine On
Redirect 301 /forum https://develop.metrolansing.com/discussions
RedirectMatch ^/$ /discussions/
RewriteRule ^wp-content/uploads/2016/09/(.*)$ /ebay/$1 [R=301,NC,L]

RewriteBase /
RewriteCond %{HTTPS} !^on$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

请求http://develop.metrolansing.com重定向至https://develop.metrolansing.com,并要求http://develop.metrolansing.com/forum重定向至https://develop.metrolansing.com/discussions(该网站现位于/discussions)。

然而,如果我访问http://develop.metrolansing.com/discussions,请求未重定向到 https。

为什么最后一行没有正确重定向子目录的请求?

答案1

我猜这/discussions是一个物理目录,它有自己的.htaccess文件,你在其中使用 mod_rewrite (来处理你的论坛)?mod_rewrite 指令默认不会被继承,因此文件中的 mod_rewrite 指令/discussions/.htaccess将完全覆盖父指令,并且不会发生 HTTP 到 HTTPS 的重定向。

您或许可以通过在子目录文件顶部包含以下内容来启用 mod_rewrite 继承.htaccess

RewriteOptions inherit

但是,最好将子目录.htaccess文件中的指令合并到父.htaccess文件中(必要时进行调整)。

您还应避免将 mod_alias (RedirectRedirectMatch) 重定向指令与 mod_rewrite ( RewriteRule) 重定向混用。不同的模块在请求期间会在不同时间进行处理,因此结果可能会令人困惑,并且可能会出现意外冲突。mod_rewrite 通常首先执行,尽管 中的顺序似乎不同.htaccess

相关内容