.htaccess不会将所有请求redirect到HTTPS

我有以下设置为我的.htaccess文件develop.metrolansing.com:

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被redirect到https://develop.metrolansing.com ,同时请求http://develop.metrolansing.com/forum被redirect到https://develop.metrolansing。 com /讨论 (该网站现在居住/讨论)。

但是,如果我访问http://develop.metrolansing.com/discussions ,请求不会redirect到https。

为什么最后一行不正确地redirect子目录的请求?

我猜/discussions是一个物理目录,它有自己的.htaccess文件,其中你正在使用mod_rewrite(来处理你的论坛 )? mod_rewrite指令不是默认inheritance的,所以/discussions/.htaccess文件中的mod_rewrite指令将完全覆盖父指令,并且不会发生HTTP到HTTPSredirect。

您可以通过在子目录的.htaccess文件的顶部包含以下内容来启用mod_rewriteinheritance:

 RewriteOptions inherit 

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

你也应该避免混合mod_alias( RedirectRedirectMatch )redirect指令与mod_rewrite( RewriteRule )redirect。 在请求过程中,不同的模块会在不同的时间进行处理,所以结果可能会令人困惑,最终会出现意想不到的冲突。 mod_rewrite通常首先执行,尽pipe在.htaccess显然顺序。