在WordPress上实现SSL后,我如何修复重定向链?

时间:2019-01-06 作者:Niklas

在wordpress上实现ssl后,我想强制重定向到具有以下特征的站点:

non www, ssl, with trailing slash

不幸的是,它只在某些情况下有效。

例如,它不是从具有这些特征的站点(http、非www、无尾随斜杠到https、非www、有尾随斜杠)重定向,而是这样重定向:

  • http://example.com/foo 结束https://example.com/foohttps://example.com/foo/.
我还遇到了一个问题,即将不带尾部斜杠的www http站点重定向到带尾部斜杠的https非www站点。

当前,它重定向自http://www.example.com/foo 通过http://example.com/foohttps://example.com/foohttps://example.com/foo/.

因此,我的问题是:我如何解决这个问题?这是由Wordpress系统完成的吗?

随信附上我的.htaccess 文件我希望你能帮助我。

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

RewriteCond %{REQUEST_URI} !wp-content\\/cache\\/(all|wpfc-mobile-cache)
这可能是WordPress造成的吗?我之前提到过这一点,但WordPress也提供了一个重写代码。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

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

如果你是在.htaccess 那么我就不会在一个重定向中尝试这样做。最长的“链”应该是两个重定向(1、2甚至3个重定向对SEO没有影响):

在第一个重定向中将HTTP规范化为HTTPS,将www规范化为非www,并在第二个重定向中附加尾部斜杠(但是,如果您正在实施HSTS 然后,您需要首先实现HTTP到HTTPS重定向(在同一主机名上)。然后规范化子域。这可能会导致最多3次重定向。)

这似乎是您在第一个示例中看到的。

可以在中附加尾部斜杠.htaccess, 但是,您尚未显示此代码,所以我假设WordPress配置为执行此操作?

当前,它重定向自http://www.example.com/foo 通过http://example.com/foohttps://example.com/foohttps://example.com/foo/.

然而,这与您发布的指令无关,假设这些指令位于.htaccess 文件:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
这些指令仅重定向到https://, 所以还不清楚你的第二阶段将重定向到哪里http://example.com/foo 是从哪里来的?除非您看到缓存的响应?

大概,您已经在整个应用程序中使用尾部斜杠链接到URL,并且之前实现了规范的www到非www重定向,因此http://www.example.com/foo 应该是比较罕见的。(?)