2008-11-03 4 views
1

Я хочу, чтобы заставить Apache использовать HTTPS для определенного URL в следующей форме:.htaccess требует SSL для конкретного URL

https://www.example.com/signup/* 

так

если кто-то идет к какой-либо из следующих примеров URL-адресов напрямую, Apache перенаправляет URL-адрес на эквивалентный сайт HTTPS.

например.

http://www.example.com/signup --> https://www.example.com/signup 
http://www.example.com/signup/basic+plan --> https://www.example.com/signup/basic+plan 
http://www.example.com/signup/premium --> https://www.example.com/signup/premium 

Кто-нибудь знает как?

Заранее спасибо

ответ

2

Вы можете использовать Redirect директиву:

Redirect 301 /signup https://www.example.com/signup 

Это будет автоматически сохранять что-либо следующее/регистрации в URL. Обязательно настройте эту директиву только на своем сайте, отличном от SSL, или он может попасть в рекурсивный цикл!

+0

Когда я использую ваш пример кода, а затем в Firefox и перейдите по адресу http://example.com/signup, чтобы проверить, перенаправляется ли он на https, я получаю следующую ошибку Firefox: «Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, который никогда не будет завершен ». – 2008-11-03 03:51:13

+0

Вы, вероятно, добавили директиву Redirect на сайты SSL и не SSL. Вы хотите добавить его * только * на сайт без SSL. – 2008-11-03 03:57:58

0

Вы можете сделать это с mod_rewrite -

RewriteCond% {SERVER_PORT}^443 $

RewriteRule ^/регистрация https://example.com/signup

RewriteRule ^/регистрация /(.*)$ https://example.com/signup/ $ 1

Должен работать, хотя я его не тестировал.

- редактировать -

Correction, я просто попытался это на одном из моих серверов, и она отлично работает для меня. Вы можете выполнить двойную настройку конфигурации mod_rewrite. Кроме того, если вы используете .htaccess, вам нужно убедиться, что для этого каталога разрешены переопределения.

В качестве дополнительного примечания предполагается, что ваш SSL-трафик поступает через порт 443. Если это не так, вам необходимо соответствующим образом скорректировать условие перезаписи.

4

Я думаю, что это было то, что я использовал:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} ^/somefolder/? 
RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L] 

(от here)

+0

Murat Когда я пытаюсь использовать ваш код и тестирую http://example.com/somefolder, он перенаправляется на https://example.com/somefolder/somefolder (заметил двойной «некоторая папка» в URL-адресе. – 2008-11-03 05:28:09

5

Спасибо Murat,

Yours почти работал, но понял, как заставить его работать точно.

Ниже, что работает:

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

Обратите внимание, что я не включил SomeFolder в www.domain.ком RewriteRule

1

Я использовал следующие требовать раздел оформления заказа веб-сайта требует SSL:

<Directory "/var/www/html"> 
     RewriteEngine on 
     Options +FollowSymLinks 
     Order allow,deny 
     Allow from all 
     RewriteCond %{SERVER_PORT} !^443$ 
     RewriteRule \.(gif|jpg|jpeg|jpe|png|css|js)$ - [S=1] 
     RewriteRule ^checkout(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] 
</Directory> 

Так, например, попав http://www.example.com/checkout перенаправляет к https://www.example.com/checkout

Правило будет показывать расширения файлов, которые обычно включаются в страницу, чтобы вы не получали предупреждения о смешанном содержании. Вы должны добавить в этот список по мере необходимости.

Если вы хотите несколько страниц изменить RewriteRule на что-то вроде:

RewriteRule ^(checkout|login)(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] 

Конечно, каталог должен соответствовать фактическому пути на сервере. Эта страница также может помочь с дополнительной информацией для ваших нужд: http://www.whoopis.com/howtos/apache-rewrite.html

Я использую это на веб-сайте, который запускает Plesk 8.6, но это не должно иметь значения. Это в моем файле vhost.conf, который похож на его в файле httpd.conf. Я не уверен, что вам нужно будет настроить что угодно, чтобы использовать его в файле .htaccess, но я сомневаюсь. Если вы добавляете в файл conf, не забудьте перезапустить apache, чтобы перезагрузить конфигурацию.

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

RewriteCond %{SERVER_PORT} ^443$ 
RewriteRule \.(gif|jpg|jpeg|jpe|png|css|js)$ - [S=1] 
RewriteRule !^(checkout|login)(.*)$ http://%{SERVER_NAME}%{REQUEST_URI} [L,R] 

Если вы используете Plesk, как я иметь в виду, что весь трафик не-SSL использует файл vhost.conf но все SSL трафика использует файл vhost_ssl.conf , Это означает, что ваше первое правило перезаписи, требующее SSL, будет находиться в файле vhost.conf, но второе правило, чтобы принудительно вернуться к не-SSL, должно быть отправлено в файл vhost_ssl. Если вы используете httpd.conf или .htaccess, я думаю, вы можете разместить их в одном месте.

Я также разместил этот учебник в своем блоге: Apache rewrite rules to force secure/non-secure pages.