Вызовите 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

'мой' - название папки, для которой я должен вызвать 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

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

:?

18
задан Nathan Pitman 22 July 2010 в 09:06
поделиться

4 ответа

Ах, конечно. Проблема заключается в том, что ваш набор правил перезаписи будет переработан после преобразования в 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
16
ответ дан 30 November 2019 в 08:52
поделиться

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

#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]

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

1
ответ дан 30 November 2019 в 08:52
поделиться

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

RewriteCond %{HTTPS} =on
RewriteRule !^my http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]
0
ответ дан 30 November 2019 в 08:52
поделиться

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

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]
4
ответ дан 30 November 2019 в 08:52
поделиться
Другие вопросы по тегам:

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