我将以下设置作为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。
为什么最后一行没有正确重定向对子目录的请求?
我猜这
/discussions
是一个物理目录,它有它自己的.htaccess
文件,你在其中使用 mod_rewrite (处理你的论坛)?默认情况下不继承 mod_rewrite 指令,因此/discussions/.htaccess
文件中的 mod_rewrite 指令将完全覆盖父指令,并且您的 HTTP 到 HTTPS 重定向不会发生。您也许可以通过在子目录
.htaccess
文件的顶部包含以下内容来启用 mod_rewrite 继承:但是,最好将子目录
.htaccess
文件中的指令合并到父.htaccess
文件中(在必要时进行任何调整)。您还应该避免将 mod_alias (
Redirect
和RedirectMatch
) 重定向指令与 mod_rewrite (RewriteRule
) 重定向混合。在请求期间,不同的模块在不同的时间处理,因此结果可能会令人困惑,最终可能会出现意想不到的冲突。mod_rewrite 通常首先执行,尽管.htaccess
.