Есть какие-либо негативные последствия при использовании Mod-Rewrite?
-
09-06-2019 - |
Вопрос
Я знаю, что есть много положительных моментов, которых достигает mod-rewrite.Но есть ли какой-то негатив?Очевидно, что если у вас плохо написанные правила, у вас возникнут проблемы.Но что, если у вас сайт большого объема и вы постоянно используете mod-rewrite, окажет ли это существенное влияние на производительность?Я быстро поискал несколько тестов в Google и почти ничего не нашел.
Решение
Я использовал mod_rewrite на сайтах, которые получают миллионы просмотров в месяц без каких-либо существенных проблем с производительностью.Вы действительно должны знать, какие изменения будут применены в первую очередь, в зависимости от ваших правил.
Использование mod_rewrite, скорее всего, быстрее, чем синтаксический анализ URL-адреса на вашем текущем языке.
Если вы действительно беспокоитесь о производительности, не используйте .htaccess
файлы, они работают медленно.Поместите все свои правила перезаписи в конфигурацию Apache, которая читается только один раз при запуске. .htaccess
файлы повторно анализируются при каждом запросе, а также каждый .htaccess
файл в родительских папках.
Другие советы
Чтобы повторить то, что Райан сказал выше, правила в .htaccess
это действительно может снизить время загрузки на загруженном сайте по сравнению с наличием правил в вашем конфигурационном файле.Изначально мы пробовали это (~ 60 миллионов страниц в месяц), но это продолжалось недолго, пока наши серверы не начали дымиться :)
Очевидным недостатком наличия правил в вашей конфигурации является то, что вам приходится перезагружать конфигурацию всякий раз, когда вы изменяете свои правила.
Последний флаг ("L") полезен для ускорения выполнения ваших правил, когда ваши правила, к которым чаще всего обращаются, находятся вверху и оцениваются в первую очередь.Однако это может значительно усложнить обслуживание, если у вас длинный набор правил - однажды утром я потратил впустую пару очень неприятных часов, редактируя свой список правил на середине, и в верхней части оказалось одно, которое охватывало больше, чем предполагалось!
У нас также возникли трудности с поиском соответствующих тестов, и в итоге мы разработали наш собственный внутренний набор тестов.Как только мы разобрались с нашими правилами, должным образом упорядочили их и внедрили в наш Apache conf, мы не обнаружили большого негативного влияния на производительность.
Если вы беспокоитесь о производительности apache, одна вещь, которую следует учитывать, если у вас много правил перезаписи, - это использовать флаг "пропустить".Это способ пропустить соответствие правилам.Таким образом, все накладные расходы, которые были бы потрачены на сопоставление, сохраняются.
Однако будьте осторожны, я работал над проектом, в котором часто использовался флаг "пропустить", и это затрудняло обслуживание, поскольку это зависит от порядка, в котором все записывается в файл.