Вот мой вопрос
Мое простое регулярное выражение работает нормально, я просто хочу убедиться, что первая часть регулярного выражения сокращается для эффективности, я задаю свои вопросы встроенными
1- Что эта вещь должна делать, это то, что файлы с перечисленными расширениями не должны перезаписываться, если файл существует, если файл не существует, мы перезаписываем запрос в наш файл php, все другие типы файлов всегда переписывается независимо от существования файла.
Например:
RewriteCond %{REQUEST_FILENAME} \.(php|gif|jpg|png|ico|swf|flv|avi|mpg|jpeg|gz|ram)$
Второе условие: если файл является одним из указанных выше расширений, существует ли он в файловой системе?
Оценка этого оператора является дорогостоящей, и я хочу убедиться, что мы коротко замкнули предыдущий RewriteCond и что это будет проверяться на значение только в том случае, если приведенное выше значение истинно.
Например:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ my_index.php?q=$1 [L,QSA]
Например:
RewriteRule \.(php|gif|jpg|png|ico|swf|flv|avi|mpg|jpeg|gz|ram)$ - [L]
RewriteRule ^robots.txt$ - [L]
RewriteRule ^(.*)$ my_index.php?q=$1 [L,QSA]
Нет, он будет анализировать каждое из ваших правил перезаписи каждого типа по очереди. Регулярное выражение может закоротить или нет в зависимости от libpcre, но каждый RewriteRule
вывод передается в следующее правило в списке. Из документов:
Правила перезаписи применяются к результатам предыдущих правил перезаписи в том порядке, в котором они определены в файле конфигурации.
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule
Однако один или несколько RewriteCond
правила могут существовать до RewriteRule
, и они фактически приведут к короткому замыканию. Итак, если операторы появляются в файле в том порядке, в котором они расположены:
RewriteCond %{REQUEST_FILENAME} \.(php|gif|jpg|png|ico|swf|flv|avi|mpg|jpeg|gz|ram)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ my_index.php?q=$1 [L,QSA]
RewriteRule
не будут выполнены, и все RewriteCond
s перед ним (в частности, дорогой) проверяться не будет.RewriteCond
будут оценены; если он ложный, происходит то же, что и выше.