2017-01-24 2 views
3

Возможно, я наблюдаю за чем-то очень простым, htaccess не является моей областью знаний..htaccess Добавление HTTPS к существующим правилам перезаписи

Мой сайт HTTPS-только, чтобы достигнуть этого, корневая папка/содержит следующие строки:

RewriteEngine On 
RewriteCond %{ENV:HTTPS} !on 
RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [R=301,L] 

Это работает просто отлично. Теперь мы имеем новую папку/проектов, которая содержит свои собственные правила HTAccess перевести URL в запросе к базе данных с помощью файла под названием /projects/project.html

The рабочей HTAccess в папку/проектов:

RewriteEngine On 
RewriteBase /projects/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ project.html?project=$1 [QSA,L] 

Теперь я хотел бы принудительно установить https-соединение на это, потому что правило https в основной директории не применяется к/проектам, если вы сразу посетите http://URL. Поэтому я изменил файл:

RewriteEngine On 

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

RewriteBase /projects/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ project.html?project=$1 [QSA,L] 

С этим, он переключается на протокол HTTPS, но я получаю «ERR_TOO_MANY_REDIRECTS».

Когда я изменить строки, как @thickguru предложил, как это:

RewriteRule ^(.*)$ https://example.com/$1 [R,L] 

Он перенаправляет меня https://example.com/index.html сразу.

Я пошарил с настройками, также с информацией this post, однако все же я не могу заставить его работать.

+0

Какую версию apache вы используете? – starkeen

+0

Я не уверен, если я даю правильный ответ, но phpinfo упоминает Apache2, версию API 20051115. Если мне нужно посмотреть в другом месте, сообщите мне об этом :) – SJDS

ответ

3

Я только что заметил это var iable вы соответствие с это % {ENV: HTTPS}, таким образом, вы можете использовать следующее правило в /projects/.htaccess:

RewriteEngine on 

RewriteCond %{ENV:HTTPS} !on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R] 

Очистить кэш браузера или попробовать diffrent браузер, чтобы проверить это.

+0

По крайней мере, теперь загружает страницы корректно при использовании https: // в URL, с полный код теперь 'RewriteEngine На RewriteCond% {ENV: HTTPS} на RewriteRule^HTTP: //% {HTTP_HOST} % {REQUEST_URI} [NE, L, R] RewriteBase/проекты/ RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule^(. +) $ project.html? проект = $ 1 [QSA, L] ' Теперь я получаю ERR_TOO_MANY_REDIRECTS при вводе http-версии URL-адреса. – SJDS

+0

К сожалению, в пункте назначения Redirect была опечатка. См. Edit – starkeen

+2

Aaah теперь вы указываете, что опечатка была очевидна, глупо я не видел. Это именно то решение, которое я искал. Большое спасибо каждому, кто внес свой вклад. Особая благодарность @tickguru за щедрость! – SJDS

1

Используйте это в .htaccess:

RewriteCond %{HTTPS} !=on 
RewriteRule ^.*$ https://www.example.com%{REQUEST_URI} [R=301,L,NE] 

Кроме того, поместите его выше ваши ваши другой RewriteRule, так что ваш .htaccess будет выглядеть следующим образом:

RewriteEngine On 

RewriteCond %{HTTPS} !=on 
RewriteRule ^.*$ https://www.example.com%{REQUEST_URI} [R=301,L,NE] 

RewriteBase /projecten/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ project.html?project=$1 [QSA,L] 

EDIT - Попробуйте это:

RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 
+0

Это не работает, дает ошибку, что запрос никогда не будет end .. В адресной строке URL-адрес изменился на вариант HTTPS, хотя – SJDS

+0

Я внес изменения в код. Повторите попытку с новым кодом. Кроме того, проверьте его, если он находится под другим «RewriteRule». – Lag

+0

Я попробовал его в обоих заказах, а также попытался сыграть с тегами R = 301, L, NE и QSA. Однако, продолжает бросать ошибки. Нет правильной обработки существующих правил в сочетании с HTTPS – SJDS

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