Назад | Перейти на главную страницу

Условия перезаписи мода короткого замыкания apache

Вот мой вопрос

Мое простое регулярное выражение работает нормально, я просто хочу убедиться, что первая часть регулярного выражения сокращается для эффективности, я задаю свои вопросы встроенными

1- Что эта вещь должна делать, это то, что файлы с перечисленными расширениями не должны перезаписываться, если файл существует, если файл не существует, мы перезаписываем запрос в наш файл php, все другие типы файлов всегда переписывается независимо от существования файла.


Например:

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 \.(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]
  1. Расширение будет проверено; если его нет в этом списке, следующий RewriteRule не будут выполнены, и все RewriteConds перед ним (в частности, дорогой) проверяться не будет.
  2. В противном случае дорогая файловая система RewriteCond будут оценены; если он ложный, происходит то же, что и выше.
  3. Если это правда, URL перезаписывается.