2011-08-03 3 views
0

настоящее время я использую этот файл .htaccess для перенаправления всех запросов на страницы с каталога на мой index.phpсила с .htaccess SSL переписывая адреса

RewriteEngine on 
RewriteCond $1 !^(index\.php|cas) 
RewriteRule ^(.*)$ /seattle/index.php/$1 [L] 

И это прекрасно работает и производит URLs, которые скрывают index.php, и у меня есть код в index.php, который делает URL-адреса чистыми.

Но теперь мне нужно, чтобы заставить страницы подключиться через SSL, поэтому я попытался

RewriteEngine on 
RewriteCond %{SERVER_PORT} 80 
RewriteCond $1 !^(index\.php|cas) 
RewriteRule ^(.*)$ https://example.com/seattle/index.php/$1 [L] 

и она работает, чтобы заставить SSL, но теперь это также заставляет URL включать index.php:

https://example.com/seattle/index.php/pagename 

вместо того, что я хочу

https://example.com/seattle/pagename 

Что я упускаю?

ответ

1

Для изменения протокола (HTTP -> HTTPS) и/или доменного имени (www.example.com ->example.com) требуется правильное перенаправление («Постоянный переадресация 301» или «302 Найденный/Переадресация темпа»).

Поэтому вы не можете комбинировать переписывание и перенаправление и показывая исходный URL-адрес. Это должно быть два разных правила, и один для изменения протокола/домена должен быть указан первым. Например:

RewriteEngine on 

# force HTTPS for all URLs 
RewriteCond %{HTTPS} =off 
RewriteRule . https://example.com%{REQUEST_URI} [R=301,L] 

# other rewrite rules 
RewriteCond $1 !^(index\.php|cas) 
RewriteRule ^(.*)$ /seattle/index.php/$1 [L] 

Правило Я добавил перенаправит ALL HTTP URL, чтобы HTTPS. Если вам нужно перенаправить только некоторые из них - добавьте соответствующие условия через дополнительные линии RewriteCond.

%{HTTPS} является наиболее распространенным и «правильным» способом проверки, включен ли SSL или нет (но все зависит от ваших конкретных обстоятельств и конфигурации сервера). При проверке с %{HTTPS} вы находитесь в безопасности от ситуации, когда ваш сайт работает на нестандартном порту (кроме 80). Вместо этого вы можете использовать %{SERVER_PORT} =80 (будет работать в большинстве случаев).

С учетом указанных выше правил переписывающийся для http://example.com/seattle/pagename будет происходить в 2 этапа:

  1. 301 Redirect в https://example.com/seattle/pagename
  2. Rewrite (внутренняя переадресация) на /seattle/index.php/pagename
+0

+1 красивая, вы молодцы! –

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