#apache #.htaccess #mod-rewrite #rewrite
#apache #.htaccess #мод-перезапись #url-переписывание
Вопрос:
Прямо сейчас у меня есть правило перезаписи, которое выглядит следующим образом:
RewriteRule ^product-([a-z^-] ).php /sample.php?m=$1
Если я попытаюсь перейти к «product-test.php «, это работает нормально.
Если я попытаюсь перейти к «product-test.php?variable= 1», это не сработает.
Как я могу изменить правило перезаписи, чтобы разрешить ПОЛУЧЕНИЕ переменной?
ПРИМЕЧАНИЕ: Переменная GET должна разрешать только буквы (Aa-Zz) и тире (-).
Ответ №1:
Я считаю, что это должно гласить
RewriteRule ^product-([A-Za-z-] ).php /sample.php?m=$1amp;%{QUERY_STRING}
Обратите внимание на обратную косую черту, скрывающую тире. Тире является оператором в соответствующей части, поэтому его необходимо экранировать.
Кроме того, чтобы включить переменные GET с перезаписанным URL без их перезаписи, добавьте идентификатор строки запроса в конец.
Это приведет к перезаписи:
www.example.com/product-widget.php?variable=12
Для
www.example.com/sample.php?m=widgetamp;variable=12
Это то, к чему, я полагаю, вы стремитесь.
Как уже было сказано, я не уверен, что экранирование тире действительно работает, поскольку я только что обнаружил проблему с использованием тире в моих перезаписанных URL, которую, похоже, я не могу решить. Похоже, что модулю Apache 1.3.33 rewrite не нравится тире в строке перезаписи. В любом случае, именно так это и должно работать, и это работает на моем сервере.
Комментарии:
1. После дальнейшего изучения я обнаружил, что в моем случае экранирование тире не работает. В итоге мне пришлось поместить тире в качестве последнего символа в запросе регулярного выражения. ie: ^([A-Za-z0-9_-])/?$