htaccess rewriterule: перенаправить http на https или https на http (в обе стороны) в зависимости от набранного URL - PullRequest
1 голос
/ 20 января 2012

Может ли кто-нибудь помочь мне написать rewriterule, который перенаправляет http <-> https (обратно и принудительно в зависимости от набранного URL) при следующих условиях:

1) http://www.mydomain.com , http://www.mydomain.com/?p=home , http://www.mydomain.com/?p=home1 , http://www.mydomain.com/?qqq=home всегда http, даже если httpsнабираются вместо http.

2) все остальные страницы всегда https, даже если вместо https был введен http.

Приведенный ниже код перенаправляет все URL-адреса (и сохраняет параметры), кромеhttp://www.mydomain.com, к https.

#redirects http to https if there are parameters
RewriteCond %{HTTPS} off
RewriteCond %{QUERY_STRING} !^$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Я пытался добавить код ниже сразу после кода выше, чтобы перенаправить https на http (если нет параметров), так чтовсе страницы всегда https, кроме www.mydomain.com, но мне не повезло.Также я пропустил? P = home,? P = home1,? Qqq = home - я не знаю, как их добавить.

RewriteCond %{HTTP} off
RewriteCond %{QUERY_STRING} ^$
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}

1 Ответ

5 голосов
/ 20 января 2012

Попробуйте добавить следующее в файл htaccess в корневом каталоге вашего сайта.

RewriteEngine on
RewriteBase /

#determine if page is supposed to be http
#if it has p=home or p=home1 or qqq=home in querystring
RewriteCond %{QUERY_STRING} (^|&)(p=home1?|qqq=home)(&|$) [NC,OR]
#or if query string is empty
RewriteCond %{QUERY_STRING} ^$
#set env var to 1
RewriteRule ^ - [E=IS_HTTP:1]


#all pages that are supposed to be http redirected if https
RewriteCond %{HTTPS} on
RewriteCond %{ENV:IS_HTTP} 1
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R,L=301]

#all other pages are sent to https if not already so
RewriteCond %{HTTPS} off
RewriteCond %{ENV:IS_HTTP} !1
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L=301]
...