htaccess - https multiple redirects

I am in the process of changing my protocol from http to https.I have wordpress installed as a subdirectory (eg: www.exa

I am in the process of changing my protocol from http to https.

I have wordpress installed as a subdirectory (eg: www.example/blog)

I have the server behind a load balancer, requests to the load balancer are encrypted but requests from the load balancer to the server are not.

I updated the home and siteurl parameters to reflect the https adddress. And I added the following code to my wp-config.php file:

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
       $_SERVER['HTTPS']='on';

For some reason, when I go to the url , the following redirects occur: https://...blog -> http://...blog/

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

I can live with one redirect (the one for adding the slash), but I don't understand why it redirects to the http:// address. I don't see anything in my setup that still references http://.

Why is it doing this?

I have tried clearing my browser's cache. I also have an .htaccess file but I suspect it doesn't have anything to do with it because the redirects occur even when all the code in the .htaccess file is commented

In someone still finds the htaccess file relevant: I have two rules in the htaccess file:

RewriteEngine On

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

RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

for redirecting http to https

and

<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>

for adding the slash (I think).

Although the first rule isn't relevant (because I am going directly to the https address). And commenting the second rule has no effect on the issue in question.

Is there anywhere else in my setup where I need to update wordpress about the fact that I'm using https?

Thanks.

I am in the process of changing my protocol from http to https.

I have wordpress installed as a subdirectory (eg: www.example/blog)

I have the server behind a load balancer, requests to the load balancer are encrypted but requests from the load balancer to the server are not.

I updated the home and siteurl parameters to reflect the https adddress. And I added the following code to my wp-config.php file:

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
       $_SERVER['HTTPS']='on';

For some reason, when I go to the url https://www.example/blog, the following redirects occur: https://...blog -> http://...blog/

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

I can live with one redirect (the one for adding the slash), but I don't understand why it redirects to the http:// address. I don't see anything in my setup that still references http://.

Why is it doing this?

I have tried clearing my browser's cache. I also have an .htaccess file but I suspect it doesn't have anything to do with it because the redirects occur even when all the code in the .htaccess file is commented

In someone still finds the htaccess file relevant: I have two rules in the htaccess file:

RewriteEngine On

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

RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

for redirecting http to https

and

<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>

for adding the slash (I think).

Although the first rule isn't relevant (because I am going directly to the https address). And commenting the second rule has no effect on the issue in question.

Is there anywhere else in my setup where I need to update wordpress about the fact that I'm using https?

Thanks.

Share Improve this question asked May 1, 2017 at 19:06 theyuvtheyuv 2091 silver badge15 bronze badges 1
  • I use a similar configuration with LB responding to https but web server only http. I made two configurations: 1) set siteurl to https:// site.domain and 2) wp-config.php added $_SERVER['HTTPS'] = 'on'; – user42826 Commented May 9, 2017 at 20:23
Add a comment  | 

4 Answers 4

Reset to default 1

This is somewhat of a guess, but it is probably a result of the web server configuration. What your server probably does is to see that the request want to load the blog url of the site. It checks out and sees that blog is a directory adds a slash and redirects to it. Now because the load balancer sends an http request the web server redirect to http. After that the request is made to the wordpress directory and all your htaccess and wordpress logic kicks in and provides the correct info/redirects etc.

Solution... if this is not only a good story, but also a true one, an http to https redirection in an htaccess of the root directory should probably fix it.

If it actually does fix the issue (and you think the fix worth your time) you will want to consider merging the "wordpress" htaccess into the root one as apache reads all the htaccess in each directory in the hierarchy on each request and "runs" them which is a pointless waste of time.

You need to update the baseurls in your database. Namely the option_values for siteurl and home in the options table.

The following code will do that for you robustly. Watch out for the prefix, which here I have indicated is "wp_" but which of course, it should not be! :) Also of course you need to change the site name:

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

Try this in your .htaccess file

<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>

See if it helps

You should not have to edit WordPress files yourself. WordPress can be used with either http or https without the need of manual code change.

If you have to change the protocol for an existing WordPress site, you can do two things:

  1. Make sure, your blog is accessible through http and https. Then switch to your WordPress settings in the backend and just update the blogs url from http://example to https://example WordPress should update the database and .htaccess-file itself

  2. you can do a search & replace on the database. To do so, you have to be aware of serialized data, which is not recognized with a simple search & replace process. I suggest you to use a tool like from interconnect

Make sure your wp-config.php does not contain a hardcoded url (see "Changing The Site URL"), which will overwrite your changes again.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745288362a4620703.html

相关推荐

  • htaccess - https multiple redirects

    I am in the process of changing my protocol from http to https.I have wordpress installed as a subdirectory (eg: www.exa

    5小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信