2016-08-25 1 views
2

В настоящее время я перенаправлять все страницы на протокол HTTPS, используя следующую директиву HTAccess:Как я могу направить все страницы, кроме одного, на HTTPS в htaccess?

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

Но у меня есть одна страница, http://foo.bar/baz которая должна быть доступна HTTP-только. Используя директиву htaccess, как я могу перенаправить на https на всех страницах, кроме этого, где пользователи вынуждены использовать http?

Edit: я должен отметить, что это приложение Laravel 4, и я в настоящее время имеют следующие правила для обработки фронт-контроллер

# Redirect Trailing Slashes... 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Handle Front Controller... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 

ответ

1

Вы можете использовать отрицательный шаблон регулярного выражения в RewriteRule:

RewriteEngine On 

RewriteCond %{HTTPS} off 
RewriteCond %{THE_REQUEST} !/baz[/?\s] [NC] 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NE,L] 

RewriteCond %{HTTPS} on 
RewriteCond %{THE_REQUEST} /baz[/?\s] [NC] 
RewriteRule^http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NE,L] 

RewriteRule ^index\.php - [L,NC] 

# Redirect Trailing Slashes... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301,NE] 

# Handle Front Controller... 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 
+0

Извините, вы можете объяснить здесь логику? – KinsDotNet

+0

Хм. Кажется, это не работает для меня./baz все еще перенаправляет https. – KinsDotNet

+0

Я добавил некоторую информацию о том, что приложение является laravel и правилами, которые прилагаются к нему. Не могли бы вы посмотреть на него и вернуться ко мне? – KinsDotNet

1

отрицательная опережения работает especifically для таких случаев, когда вы хотите один или несколько исключений:

RewriteRule ^(?!baz)(.*) https://%{HTTP_HOST}/$1 [R,L] 

В основном это говорит о перенаправлении всего, кроме baz.

SideNote: Помните, что «.htaccess» не является своего рода перезаписывающим депо для Apache, если у вас есть доступ к конфигу в виртуальном хосте, не забудьте добавить эти перезаписи туда. htaccess добавляет накладные расходы и сложность.

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