2013-03-25 1 views
0

Я пытаюсь настроить некоторые условные редиректы, что я хочу это:htaccess: включение и выключение https для определенных URL-адресов?

http://www.example.com/login 
http://www.example.com/login/* 
http://www.example.com/login/account 
http://www.example.com/login/account/* 
https://www.example.com/account 
https://www.example.com/account/* 

Моя проблема заключается в существующие правила .htaccess заставляют /login/account работать под HTTPS так что я получаю это:

http://www.example.com/login 
http://www.example.com/login/* 
https://www.example.com/login/account 
https://www.example.com/login/account/* 
https://www.example.com/account 
https://www.example.com/account/* 

Вот текущие правила:

<Files .htaccess> 
order allow,deny 
deny from all 
</Files> 

<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ - [E=site_url:http://www.example.com] 
RewriteCond %{SERVER_PORT} 443 
RewriteRule ^(.*)$ - [E=site_url:https://www.example.com] 

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} /account 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 

RewriteCond %{SERVER_PORT} 443 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(/account) 
RewriteRule ^(.*)$ http://www.example.com/$1 [R,L] 

Я предполагаю, что проблема с RewriteCond %{REQUEST_URI} !(/account) правилом. Я пробовал множество вариаций и искал везде, но не нашел ничего, что соответствовало бы тому, что я хочу делать.

Итак, чтобы уточнить все, что ниже /account должно быть https, все остальное должно быть http.

Для информации это сайт движка выражений, поэтому это не физические файлы или каталоги, а динамически генерируемые URL-адреса.

Любая помощь будет высоко оценена.

ответ

1

Попробуйте это ...

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} /account 
RewriteCond %{REQUEST_URI} !(login/account) 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 

RewriteCond %{SERVER_PORT} 443 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(/account) 
RewriteCond %{REQUEST_URI} (login/account) 
RewriteRule ^(.*)$ http://www.example.com/$1 [R,L] 

ExpressionEngine конкретный пример HTTPS/HTTP: https://expressionengine.stackexchange.com/questions/7601/adding-a-htaccess-redirect-to-https-that-plays-nicely-with-existing-ee-htacces/7659#7659

+0

Спасибо за это, но не повезло, до сих пор получить тот же результат. Спасибо за ссылку, я посмотрю, посмотрю, смогу ли я это понять. – neilkb

+0

После многих корректировок я, наконец, добрался туда с небольшой модификацией к вашему предложению. Все инструкции 'RewriteCond' должны были содержать'/account?. * ', Но это было просто специфично для моего конкретного сайта. благодаря – neilkb