Ваша проблема в том, что @Jan объяснил, что при первом выполнении идентификатора перезаписи search
становится results_template.php
.Чтобы понять это полностью, я добавлю, что тег [L]
на перезаписи действительно останавливает перезапись и проталкивает результирующий путь к Apache, но на самом деле внутреннее перенаправление выполняется в apache, а mod-rewrite повторно-применяется после этого внутреннего перенаправления.
Это самое сложное для понимания с помощью переписывания модов.Использование RewriteLog и RewriteLogLevel может значительно помочь вам обнаружить такие проблемы при работе с этими не очень простыми правилами.
Нет, решение, предоставленное Яном, не будет работать, но существует более общее решение.Если вы хотите, чтобы ваши правила применялись только один раз, только по URL-адресу, предоставленному браузерами, и если вы не объединяете несколько уровней перенаправлений, тогда самый простой способ убедиться, что ваши правила - , предотвращает их применение после внутреннегоперенаправление .И это можно сделать, проверив перед каждым правилом, что переменная окружения REDIRECT_STATUS пуста
# prevent this rule from being applied after first pass
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ...
EDIT
Но я только что прочитал @baynezy(+1) ответ и тег [NS] или [nosubreq], кажется, делают то же самое.Вы должны попробовать это тоже.