将http重定向到HTTPS在安装了另一个WordPress实例的子目录上不起作用

时间:2020-09-23 作者:alancc

我已经在上安装了两个WordPress实例https://www.example.com/ 和一个子目录https://www.example.com/blogs/

现在,为了将所有HTTP URL重定向到HTTPS版本,我在中添加了以下指令.htaccess 在根文件夹中,如下所示:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301,NC]
这适用于根文件夹下的所有URL,但根文件夹下的URL除外/blogs/ 子文件夹。

我尝试修改.htaccess 在下面/blogs/ 再次添加上述指令。但这不起作用。为什么?

我认为指令在`。htaccess由子文件夹继承,为什么它不适用于/blogs/

  • 我是否应该将指令更改为:
  • RewriteEngine On 
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://www.example.com/blogs/$1 [L,R=301,NC]
    
    实际上,我已经试过了,但也没有成功。

    Update:

    现在让我举一个例子来更清楚地解释这一点:

    对于URL,例如http://www.example.com/outlook-repair/, 它CAN 被重定向到https版本https://www.example.com/outlook-repair/ 正确地

    但是,对于下面的URL/blogs/ 子文件夹,例如http://www.example.com/blogs/2-useful-methods-to-recover-outlook-data-from-a-damaged-disk-image-file, 它CANNOT 被重定向到https版本,您得到的仍然是HTTP版本。这就是问题所在。

    Update

    以下是/blogs/.htaccess, 为了简化操作,我禁用了WP Fastest Cache插件:

    # BEGIN WordPress
    # The directives (lines) between "BEGIN WordPress" and "END WordPress" are
    # dynamically generated, and should only be modified via WordPress filters.
    # Any changes to the directives between these markers will be overwritten.
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /blogs/
    RewriteRule ^index\\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /blogs/index.php [L]
    </IfModule>
    
    # END WordPress
    
    # Wordfence WAF
    <Files ".user.ini">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>
    </Files>
    
    # END Wordfence WAF
    

    Update 2

    我尝试为主站点和博客站点设置重定向插件的站点选项,如中所述https://redirection.me/support/site-options/ , ubt也仍然不起作用。

    1 个回复
    最合适的回答,由SO网友:MrWhite 整理而成

    我认为指令.htaccess 由子文件夹继承

    根目录中的mod\\u rewrite指令.htaccess 文件不是由继承的/blog/.htaccess 文件(默认情况下)。您需要专门启用mod\\u重写继承,然而,这可能会增加不必要的复杂性。

    我尝试修改。htaccess在/blogs/下,再次添加上述指令。但这不起作用。为什么?

    即使启用了mod\\u rewrite继承,这也不会一成不变,因为它会将请求重定向回文档根目录。您需要像您提到的那样修改指令(通过添加/blogs 但是,这会破坏文档根目录中WordPress站点的重定向。

    相反,您需要在/blog/.htaccess 文件由于它位于子目录中,并且子目录似乎是URL路径的一部分,因此最好使用REQUEST_URI 服务器变量,以避免在指令中硬编码子目录(尽管子目录在以后的指令中是硬编码的-这是可以避免的-但我假设是由WordPress创建的)。

    旁白:如果启用了mod\\u rewrite继承,则需要更改根目录.htaccess 也要使用的文件REQUEST_URI 相反然而,这不太可能是您需要更改的唯一内容。)

    例如:

    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]
    
    TheREQUEST_URI 服务器变量包含完整的根相对URL路径(以斜杠开始)。

    这个NC 国旗在这里是多余的。