我已经在上安装了两个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也仍然不起作用。
最合适的回答,由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]
The
REQUEST_URI
服务器变量包含完整的根相对URL路径(以斜杠开始)。
这个NC
国旗在这里是多余的。