子文件夹正在重定向到根目录,它不应该

subfolder is redirecting to root and it shouldn't

我的站点是一个 wordpress 站点。如果用户登陆 http://www.example.com/subfolder (non-ssl), they are being incorrectly redirected to https://www.example.com(ssl 但没有子文件夹)。 我该如何阻止呢?他们需要在重定向到 https:// 后留在子文件夹中。

我在 Wordpress 中使用 Really Simple SSL 插件。我的 .htaccess 文件包含以下代码:

#BEGIN ReallySimpleSSL
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/ [R=301,L]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /subfolder/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /subfolder/index.php [L]
</IfModule>

我对 .htaccess 文件的编辑从来都不擅长。如有任何帮助,我们将不胜感激!

编辑:………… 我的 .htaccess 文件位于子文件夹中。根目录中还有另一个 .htaccess 文件,以及另一个网站。我试图将子文件夹的用户保留在子文件夹中。 *我在上面的代码中添加了第二个 IfModule。 根目录中的 .htaccess 包含以下代码:

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

运行 在我尚未使用的新浏览器 window 中,我得到了相同的结果。

Really simple ssl 插件可能会导致此类问题。检查插件设置中的 stop editing htaccess file 选项并使用您的 htaccess 代码进行测试,或者尝试使用下面的代码片段,它对 subfolders/subdomains 一切都很好

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Header always set Content-Security-Policy "upgrade-insecure-requests;"

问题很可能是您在子文件夹中的配置文件顶部实施的规则:

RewriteRule ^(.*)$ https://%{HTTP_HOST}/ [R=301,L]

它先于子文件夹中的任何其他内容应用,并且无条件地将所有非 ssl 请求重写为 ssl。这里的问题:

捕获模式 ^(.*)$ 被应用到请求中的 相对 路径,这只是基于子文件夹的路径部分。这就是应用分布式配置文件中的规则的方式,这在文档中有明确说明。这实际上是分布式配置文件增加很多复杂性并导致很多问题的原因之一...

因此,您必须在顶层实现 https 重定向,或者使用绝对路径,或者手动将子文件夹添加到重定向目标。我会选择第二个选项:

RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]