change to https and redirect to subfolder rule in .htaccess

[亡魂溺海] 提交于 2019-12-12 02:53:10

问题


I am trying to do two things here:

  1. redirect to a sub-folder

    redirect http://www.something.com/some/page.html or https://www.something.com/some/page.html to https://www.something.com/subfolder/some/page.html

  2. redirect http to https

    redirect http://www.something.com/subfolder/some/page.html to https://www.something.com/subfolder/some/page.html

And I want to do both of them in the same .htaccess file

I have been able to redirect to subfolder by the following code:

Options +FollowSymLinks -MultiViews
RewriteEngine on 
RewriteBase / 
RewriteCond %{HTTP_HOST} something.com [NC] 
RewriteRule ^(.*)$ https://www.something.com/subfolder/$1 [R=301,NC]

And then I am trying to do both of them; i.e. http to https(only if http request comes) and redirect to subfolder by the following code:

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /

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

RewriteCond %{HTTP_HOST} something.com [NC] 
RewriteRule ^(.*)$ https://www.something.com/subfolder/$1 [R=301,NC]

But it's not working. What am I doing wrong here?

EDIT

When using @starkeen's solution; i.e.

Options +FollowSymLinks -MultiViews
RewriteEngine on 
RewriteBase / 

RewriteCond %{HTTPS} off
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]
RewriteCond %{REQUEST_URI} !^/subfolder
RewriteRule ^(.*)$ https://www.example.com/subfolder/$1 [R=301,NC,L]

I am expecting the following as result:

https://www.example.com/subfolder/brands/omega.html

when I give any of the following:

http://example.com/brands/omega.html OK
https://example.com/brands/omega.html OK

http://www.example.com/brands/omega.html OK
https://www.example.com/brands/omega.html OK

http://example.com/subfolder/brands/omega.html WRONG
http://www.example.com/subfolder/brands/omega.html WRONG

But the last two are redirecting to

https://www.example.com/subfolder/


回答1:


Here is a rule to do both the tasks in a single rule:

RewriteEngine On

RewriteCond %{HTTPS} off [OR]
RewriteCond %{REQUEST_URI} !^/subfolder [NC]
RewriteRule ^(?:subfolder)?(/.*)?$ https://www.example.com/subfolder$1 [NE,L,R=302,NC]

Make sure to clear your browser cache before testing this rule.




回答2:


Try :

Options +FollowSymLinks -MultiViews
RewriteEngine on 
RewriteBase / 
#--Http ==>https--#
RewriteCond %{HTTPS} off
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]
#--exclude the destination to avoid redirect loop--#
RewriteCond %{REQUEST_URI} !^/subfolder
#--redirect /foo to /subfolder/foo--#
RewriteRule ^(.*)$ https://www.something.com/subfolder/$1 [R=301,NC,L]

Clear your browser'cache before testing this redirect.



来源:https://stackoverflow.com/questions/36008195/change-to-https-and-redirect-to-subfolder-rule-in-htaccess

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!