RewriteRule RewriteCond в .htaccess

Рейтинг: 1Ответов: 1Опубликовано: 26.02.2015

Ситуация такая. На просторах интернета нашел указание .htaccess с использованием mod_rewrite на "завязку" всех вопросов на один файл index.php

RewriteEngine on  
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^.*$ [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Надо: исключить из этой конструкции файлы типов .css и .js. Сам я с файлом htaccess на этом уровне работаю впервые (addDefaultCharset не в счет)

Дословно со слов автора: *Данная запись означает буквально следующее: если запрошенный URL-адрес не является файлом, не является символической ссылкой и не является директорией, то подменить виртуальный адрес файлом index.php. При этом, суперглобальная переменная PHP

  **$_SERVER['REQUEST_URI']**

будет содержать именно запрошенный виртуальный адрес.*

Мои рассуждения:

  1. RewriteCond - формирует определенное правило, по которому будет делаться редирект
  2. %{REQUEST_FILENAME} - сама строка запроса
  3. -s, -l, -d - специальные параметры, проверяющие на "ненулевость" файла, символичную ссылку, каталог. Т.е. если строка запроса указывает на существующие папку или файл, то редиректа не будет
  4. Последние 2 строки - выполняют сам редирект

Объясните мне, как надо записать правило, чтобы из редиректа убрать файлы css, js.

Просьба: сообщения типа гугл в помощь, поищи в интернете не писать. Мне нужно объяснение по-человечески. т.е. полный разбор такого правила. Мне надо не тупо скопипастить, а понять логику работы, чтобы в дальнейшем было меньше вопросов.

Всем откликнувшимся заранее спасибо

Ответы

▲ 1Принят
RewriteEngine on  

RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Пояснение: Если это не симлинки [и] не файл [и] не директория, то производится виртуальный редирект на /index.php

Обновление

Использование белого списка.

RewriteEngine on  

RewriteCond %{REQUEST_URI} \.(?!css$|js$|jpeg$|jpg$|png$|gif$|ico$|font$|map$)[^.]+$ [NC]
RewriteCond %{REQUEST_URI} !robots\.txt$
RewriteRule . /index.php [L]

Пояснение: Если это не файлы с расширениями css, js,... [и] не файл robots.txt, то производится виртуальный редирект на /index.php.