Переадресация https .htaccess для одной страницы (с использованием относительных URL) - PullRequest
2 голосов
/ 28 марта 2012

Мне нужно иметь возможность перенаправить одну страницу со стандартного http на https.Например, я хочу перейти от http://domain.com/quote.php к https://domain.com/quote.php.

Пока что я использую этот код в своем файле .htaccess, и он работает для первоначального перенаправления.

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^quote.php https://domain.com/quote.php [R=301,L]

Моя проблема в том, что, как только я зашел на страницу quote.php и был перенаправлен на версию https, все остальные страницы сайта, по которым я перехожу, продолжают использовать протокол https.Это потенциальная проблема с дублирующимся контентом, так как теперь у меня есть тот же контент, доступный через http и https.

Итак, я хочу сделать перенаправление выше, а затем каким-то образом сделать то же самое.в обратном порядке для всех страниц, кроме quote.php.Поэтому, если вы попытаетесь получить к ним доступ через https, он будет перенаправлен на версию http по умолчанию.

Я использую относительные URL-адреса по всему сайту, поэтому не могу просто жестко кодировать префикс https / http.Я должен быть в состоянии сделать это через .htacess, если это возможно.

Любая помощь очень ценится.

1 Ответ

8 голосов
/ 28 марта 2012
RewriteCond %{HTTPS}  off
RewriteRule  ^quote.php$  https://domain.com/quote.php  [R=301,L,QSA]

RewriteCond %{HTTPS}  on
RewriteCond %{REQUEST_URI}   !^/quote.php
RewriteRule  ^(.*)$  http://domain.com/$1  [R=301,L,QSA]

ответ на комментарий: для добавления новой страницы в условные обозначения просто поставьте их в скобках. Like:

RewriteCond %{HTTPS}  off
RewriteRule  ^(quote|contact).php$  https://domain.com/$1.php  [R=301,L,QSA]

вопрос 2: QSA флаг добавления текущей строки запроса к новому URL.это происходит по умолчанию, за исключением случая, когда вы меняете строку запроса.Вы можете удалить их сейчас безопасно, но если вы добавили строку запроса и хотите иметь старую, поставьте ее обратно.


Редактировать 2: Приведенный выше код имеет небольшую проблему с безопасностью :( на самом деле это больше, чем немного :-D. когда вы используете https для передачи HTML-кодов, а страница использует относительные пути, так что это нормально. но когда вы помещаете эти коды в .htaccess они превращаются в http и в этом проблема :-).поместите код ниже, чтобы решить проблему:):

RewriteCond %{HTTPS}  off
RewriteRule  ^(quote|contact).php$  https://domain.com/$1.php  [R=301,L,QSA]


RewriteCond %{HTTPS}  on
RewriteCond %{REQUEST_URI}   !^/(quote|contact).php
RewriteCond %{REQUEST_URI}   !^/(.*)\.(css|png|js|jpe?g|gif|bmp)$
RewriteRule  ^(.*)$  http://domain.com/$1  [R=301,L,QSA]

Теперь все изображения, сценарии, .. которые вы используете на защищенных страницах, передаются безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...