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

Оптимальное регулярное выражение mod_rewrite. Имеет ли значение способ расположения шаблонов соответствия внутри регулярного выражения?

Имею следующее:

RewriteRule ([a-zA-Z0-9]{5})?/load_page/([0-9]+)

Какое расположение было бы оптимальным для регулярного выражения:

RewriteRule ^/([a-zA-Z0-9]{5})?/load_page/([0-9]+)

ИЛИ

RewriteRule ^/load_page/([a-zA-Z0-9]{5})?/([0-9]+)

ИЛИ

RewriteRule ^/([a-zA-Z0-9]{5})?/([0-9]+)/load_page

Спасибо

Не думаю, что в вашем случае есть заметная разница.

Хотите убедиться? Протестируйте их все с помощью Apache Benchmark, Siege, JMeter или любого другого инструмента для тестирования, который вы хотите использовать или с которым знакомы.

Янне, вероятно, прав в том, что разница незначительна и вам не следует проводить оптимизацию без тестирования.

Чтобы ответить на вопрос в любом случае, это должно зависеть от того, какие URL-адреса запрашиваются. Я предполагаю, что большинство запрошенных URL-адресов не имеют пути, начинающегося с /load_page. В этом случае вполне вероятно, что регулярное выражение, начинающееся с ^/load_page будет немного быстрее, потому что он может быстро исключить множество несовпадающих строк, сравнивая первые несколько символов и не возвращаясь. Итак, если вы запросите /foo, он сравнит f к l, увидеть несоответствие и внести залог после сравнения одного или двух символов.

С другими регулярными выражениями он увидит /foo и подумайте: «Я вижу несколько хороших буквенно-цифровых символов» и прервитесь, только поняв, что остальная часть регулярного выражения не совпадает.