Сколько RewriteRules вы можете иметь в .htaccess без проблем? - PullRequest
7 голосов
/ 25 марта 2009

Простой вопрос. Есть ли ограничение на количество RewriteRules, которое я могу иметь в своем .htaccess, или я могу поместить их там в миллион, без того, чтобы Apache не стал для меня фанком?

Существует ли относительный предел, по которому сервер просто ныряет, потому что существует много правил для итерации?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 25 марта 2009

Вы должны знать, что файлы конфигурации .htaccess обрабатываются при каждом запросе .

Таким образом, если у вас есть файл .htaccess с 1000 правилами, в худшем случае каждые 1000 правил проверяются каждый раз, когда запрос попадает в этот каталог.

Поэтому вы должны использовать структуру, в которой правило соответствует запросу как можно раньше. Правила, которые обрабатывают более частые запросы, должны появляться перед теми, которые менее часты, и определять обработку (см. L flag ). Прочтите о обработке набора правил , чтобы узнать, как обрабатываются правила (см. Также RewriteLogLevel direcitve ).

Другим фактором являются регулярные выражения: лучше использовать «простые» и эффективные регулярные выражения, чем неоднозначные или сложные. Вы должны посмотреть, как регулярные выражения интерпретируются и обрабатываются, чтобы избежать дорогостоящих и получить максимальную отдачу от них.

3 голосов
/ 25 марта 2009

Если ваши RewriteRules включают несколько существующих файлов (-F) или существующих флагов url (-U), так как это подзапросы, вы можете увидеть снижение производительности. Помимо этого, я не сталкивался с ситуацией, когда несколько RewriteRule начинают негативно влиять на производительность, и моя текущая реализация имеет хороший результат.

Вы можете ограничить необходимость перебирать все RewriteRules, просто упорядочив их таким образом, чтобы более дорогие проверки выполнялись позже в процессе (если это возможно), чтобы более ранние условные выражения могли замыкать ваше переписать логику и сэкономить на вычислении более дорогих правил позже в процессе.

...