Имею следующее:
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
и подумайте: «Я вижу несколько хороших буквенно-цифровых символов» и прервитесь, только поняв, что остальная часть регулярного выражения не совпадает.