Принудительно использовать HTTPS для определенных URL-адресов и использовать HTTP для всех остальных.

У меня есть клиентский проект, в котором мне нужно установить HTTPS для определенной папки и HTTP для всех остальных. Я могу успешно применить HTTPS для папки, которую хочу, но тогда все ссылки на остальную часть сайта заканчиваются через HTTPS. Я хотел бы иметь правило, которое заставляет запросы на что-либо «не» в защищенной папке принудительно возвращаться к HTTP. Вот что у меня так далеко:

RewriteEngine On
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]

RewriteCond %{HTTPS} !=on
RewriteRule ^(my) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1

«my» - это имя папки, для которой мне нужно настроить HTTPS.

Есть идеи?

Обновление: я тоже пробовал:

RewriteEngine On
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]

# Force HTTPS for /my
RewriteCond %{HTTPS} !=on
RewriteRule ^(my) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]

# Force HTTP for anything which isn't /my
RewriteCond %{HTTPS} =on
RewriteRule !^my http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]

# Remove index.php from URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1

Но вместо того, чтобы запросы на /my принудительно передавались по HTTPS, теперь они просто разрешают http: //www.example.com/index.php/my

:

18 голосов | спросил Nathan Pitman 22 J000000Thursday10 2010, 12:29:19

4 ответа


0

Ах, конечно. Проблема заключается в том, что ваш набор правил перезаписи будет повторно обработан после его преобразования в index.php после первоначального перенаправления. Используя то, что у вас есть в данный момент, вам необходимо дополнительно обусловить перенаправления, чтобы они не применялись после перезаписи на /index.php/my.

Должно быть что-то вроде следующего:

RewriteEngine On
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]

# Force HTTPS for /my
RewriteCond %{HTTPS} !=on
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/my [NC]
RewriteRule ^(my) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]

# Force HTTP for anything which isn't /my
RewriteCond %{HTTPS} =on
RewriteCond %{THE_REQUEST} !^[A-Z]+\s/my [NC]
RewriteRule !^my http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]

# Remove index.php from URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1
ответил Tim Stone 23 J000000Friday10 2010, 01:26:34
0

Попробуйте следующее, должно сработать для вас:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/my
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/my
RewriteRule ^(.*)$ http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
ответил user2316701 22 J000000Thursday10 2010, 16:55:04
0

Это то, что работает со старого клиентского веб-сайта и может быть адаптировано для ваших целей:

#If https off and in the cart dir
RewriteCond %{HTTPS} =off [NC]
RewriteCond %{REQUEST_URI} ^/cart/(.*) [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/cart/%1 [R=301,L]

#If https on and not in cart dir    
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !^/cart [NC]
#Above line actually used to read RewriteCond %{REQUEST_URI} !^/cart|media|images|thumbs|css|js [NC]
#to allow js/css/images to be served so there were no mixed ssl messages popping up to visitors
RewriteCond %{REQUEST_FILENAME} !index\.php$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Замена корзины на мою, возможно,

ответил connrs 22 J000000Thursday10 2010, 16:21:20
0

Просто измените условия:

RewriteCond %{HTTPS} =on
RewriteRule !^my http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]
ответил Gumbo 22 J000000Thursday10 2010, 12:35:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132