Разрешить перезапись переменной GET внутри HTACCESS

Прямо сейчас у меня есть правило перезаписи, которое выглядит так:

RewriteRule ^product-([a-z^-]+).php /sample.php?m=$1

Если я попытаюсь перейти к "product-test.php", он будет работать нормально.

Если я попытаюсь перейти к "product-test.php?variable=1", это не сработает.

Как я могу изменить правило перезаписи, чтобы разрешить переменную GET?

ПРИМЕЧАНИЕ. В переменной GET должны быть разрешены только буквы (Aa-Zz) и тире (-).


person elbrian87    schedule 23.05.2011    source источник


Ответы (1)


Я считаю, что это должно быть прочитано

RewriteRule ^product-([A-Za-z\-]+).php /sample.php?m=$1&%{QUERY_STRING}

Обратите внимание на обратную косую черту после тире. Тире является оператором в соответствующей части, поэтому его необходимо экранировать.

Кроме того, чтобы включить переменные GET с переписанным URL-адресом без их перезаписи, добавьте идентификатор строки запроса в конец.

Это перепишет:

www.example.com/product-widget.php?variable=12

to

www.example.com/sample.php?m=widget&variable=12

Именно к этому, я полагаю, вы и стремитесь.

При этом я не уверен, что экранирование тире действительно работает, поскольку я только что обнаружил проблему с использованием тире в моих переписанных URL-адресах, которую я не могу решить. Похоже, что модуль перезаписи Apache 1.3.33 не любит тире в строке перезаписи. В любом случае, так это должно работать, и это работает на моем сервере.

person Patrick    schedule 23.05.2011
comment
При дальнейшем изучении я обнаружил, что в моем случае экранирование тире не работает. В итоге мне пришлось поместить тире в качестве последнего символа в запросе регулярного выражения. то есть: ^([A-Za-z0-9_-])/?$ - person Patrick; 25.05.2011