2015-09-14 3 views
1

Я пытаюсь получить несколько каталогов, чтобы всегда быть по протоколу HTTPS, а все остальное будет HTTPПроблем с HTAccess переписыванием

За исключением изображений, CSS файлов и JS файлов, которые должны быть на любой странице включена.

Так что я создал эту HTAccess рерайт:

RewriteEngine On 
RewriteBase/


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




RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule ^login/(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 


RewriteRule \.(gif|jpe?g|png|css|js)$ - [NC,L] 


RewriteCond %{HTTP:X-Forwarded-Proto} https 
RewriteCond %{REQUEST_URI} !^login/(.*)$ 
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

Но когда я иду/войти в систему я получаю сообщение об ошибке

Firefox has detected that the server is redirecting the request for this address in a way that will never complete. 

Что необходимо изменить для этого, чтобы работать должным образом?

+0

Является ли '% {HTTP: X-Forwarded-Прото}' поддерживается на Apache? – anubhava

+0

Да, он работает на AWS Load Balanced Beanstalk, поэтому я должен использовать этот метод для сравнения. –

ответ

1

Есть свои правила в следующем порядке:

RewriteEngine On 
RewriteBase/

RewriteRule \.(gif|jpe?g|png|css|js)$ - [NC,L] 

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteCond %{THE_REQUEST} /login/ [NC] 
RewriteRule^https://%1%{REQUEST_URI} [R=301,L,NC] 

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteCond %{THE_REQUEST} !/login/ [NC] 
RewriteRule^http://%1%{REQUEST_URI} [R=301,L,NC] 

RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteCond %{THE_REQUEST} /login/ [NC] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NC] 

RewriteCond %{HTTP:X-Forwarded-Proto} https 
RewriteCond %{THE_REQUEST} !/login/ [NC] 
RewriteRule^http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NC] 
0

%{HTTP_HOST} или %{REQUEST_URI} не может быть использован в RewriteRule, только в RewriteCond

Вы можете использовать% 1,% 2 и т.д., как ссылки на различные части соответствия условия Тхо. Но полный URI запроса может быть решена с помощью этого в правиле переписывания:

RewriteRule (.*) http://some_host$1

Так, если имя хоста не является динамическим, это довольно легко исправить.

+0

Хм, я пробовал это без большой удачи, однако я могу сказать, что я удалил последние 3 строки, и он работал для перенаправления на https, но без этих последних 3 строк он не будет перенаправлять другим способом, поэтому кажется, что последние 3 строки вызывают какую-то проблему. –

+0

Вы пробовали 'RewriteCond% {HTTPS} on' вместо' RewriteCond% {HTTP: X-Forwarded-Proto} https'? – Capsule

Смежные вопросы