https multiple redirects

时间:2017-05-01 作者:theyuv

我正在将我的协议从http更改为https。

我已将wordpress安装为子目录(例如:www.example.com/blog)

我将服务器置于负载平衡器后面,对负载平衡器的请求是加密的,但对服务器的请求不是加密的。

我更新了homesiteurl 反映https地址的参数。我将以下代码添加到wp-config.php 文件:

if (strpos($_SERVER[\'HTTP_X_FORWARDED_PROTO\'], \'https\') !== false)
       $_SERVER[\'HTTPS\']=\'on\';
出于某种原因,当我转到url时https://www.example.com/blog, 发生以下重定向:https://...blog -> http://...blog/

http://...blog/ -> https://...blog/

我可以接受一个重定向(添加斜杠的重定向),但我不明白为什么它会重定向到http:// 住址我在设置中没有看到仍然引用的任何内容http://.

为什么要这样做?

我已尝试清除浏览器的缓存。我也有一个。htaccess文件,但我怀疑它与此无关,因为即使在.htaccess 文件已注释

有人仍然发现htaccess 文件相关:我在htaccess 文件:

RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Proto} =http

RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
用于将http重定向到https

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
我想是为了添加斜杠。

虽然第一条规则不相关(因为我要直接到https 地址)。评论第二条规则对问题没有影响。

在我的设置中是否有其他地方需要更新wordpress,以了解我正在使用https?

谢谢

4 个回复
SO网友:Mark Kaplun

这有点像猜测,但可能是web服务器配置的结果。服务器可能要做的是查看请求是否要加载blog 网站的url。它检查出来并看到blog 是一个目录,添加斜杠并重定向到该目录。现在,因为负载平衡器发送http 请求web服务器重定向到http. 之后,向wordpress目录发出请求,您的所有htaccess和wordpress逻辑都会启动,并提供正确的信息/重定向等。

解决方案如果这不仅是一个好故事,也是一个真实的故事,那么在根目录的htaccess中进行http到https的重定向可能会解决这个问题。

如果它确实解决了这个问题(而且你认为这个修复值得花时间),那么你应该考虑将“wordpress”htaccess合并到根目录中,因为apache会在每个请求上读取层次结构中每个目录中的所有htaccess并“运行”它们,这是毫无意义的浪费时间。

SO网友:mayersdesign

您需要更新数据库中的baseURL。即选项\\u值siteurlhome 在选项表中。

下面的代码将有力地为您做到这一点。注意前缀,我在这里指出的是“wp\\u0”,但它当然不应该是!:)当然,您还需要更改网站名称:

UPDATE wp_options SET option_value = replace(option_value, \'http://www.example.com/blog\', \'https://www.example.com/blog\') WHERE option_name = \'home\' OR option_name = \'siteurl\';
UPDATE wp_posts SET guid = REPLACE (guid, \'http://www.example.com/blog\', \'https://www.example.com/blog\');
UPDATE wp_posts SET post_content = REPLACE (post_content, \'http://www.example.com/blog\', \'https://www.example.com/blog\');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, \'http://www.example.com/blog\',\'https://www.example.com/blog\');

SO网友:JItendra Rana

试试你的这个。htaccess文件

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/

RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
看看是否有用

SO网友:Felix

您不必自己编辑WordPress文件。WordPress可以与http或https一起使用,无需手动更改代码。

如果您必须更改现有WordPress站点的协议,您可以做两件事:

确保您的博客可以通过http和https访问。然后切换到后端的WordPress设置,只需从更新博客urlhttp://example.orghttps://example.orgWordPress应更新数据库和。htaccess文件本身

您可以进行搜索(&L);在数据库上替换。要做到这一点,您必须了解序列化数据,这是通过简单的搜索无法识别的&;更换流程。我建议你使用像interconnect

确保您的wp配置。php不包含硬编码url(see "Changing The Site URL"), 这将再次覆盖您的更改。