Разрешить ПОЛУЧЕНИЕ переменной внутри перезаписи HTACCESS

#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_-])/?$