2015-02-12 2 views
1

У меня есть три .htaccess правила:Htaccess mod_rewrite: порядок правил, чтобы предотвратить index.php от просмотра

  1. один, который проверяет, если домен не начинается с WWW. и он добавляет его к имени хоста
  2. тот, который проверяет, вызван ли хост без использования протокола https, и его принудительное применение
  3. последнее правило курорта, если ни одно из вышеперечисленных не согласовано, оно будет перенаправлено на index.php/$ 0, где $ 0 ничего соответствует после «/» в URL:

Это как файл выглядит следующим образом:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

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

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php/$0 [PT,L] 

Все работает файл, но когда нет https и не www вообще , пользователь перенаправляется до https:// с www., однако index.php также отображается.

например.

http://domain.com/test 

... перенаправляется ...

https://www.domain.com/index.php/test 

вместо ...

https://www.domain.com/test 

Что может быть проблема?

Большое спасибо, Влад

+0

привет, нет, тест на самом деле маршрут CodeIgniter, указывающий на index.php/контроллер/тест –

+0

Есть ли другие .htaccess или любое другое правило в вашей системе? – anubhava

ответ

0

Не уверен, почему вы используете Проходной для index.php правил ... The documentation состояния:

Цели (или замена строка) в RewriteRule является предполагается, что это путь к файлу по умолчанию. Использование флага [PT] заставляет его рассматривать как URI вместо этого. Другими словами, использование флага [PT] приводит к возврату результата RewriteRule обратно через сопоставление URL-адресов, так что, например, сопоставления на основе местоположения, такие как Alias, Redirect или ScriptAlias, могут иметь шанс для вступления в силу.

Как вы не используете Alias, Redirect или ScriptAlias, PT не распространяются на набор правил.

RewriteRule^index.php [L] 

В качестве альтернативы, один из следующих:

RewriteRule .* index.php [L] 
RewriteRule (.*) index.php/$1 [L] 
Смежные вопросы