2016-10-09 6 views
0

Что мне нужно сделать, так это передать 1 переменную как переменную, а остальную часть - как остальную часть URL-адреса, так что я могу получить их через $ _GET в php позже. Ниже не работает:mod_rewrite pass variable и

RewriteRule  ^store/([a-zA-Z0-9\_\-]+).html?(.*)/?$ store.php?var1=$1&$2 [L] 

Возможные ссылки могут быть:

store/products.html 
store/products.html?sort=asc&price=down 
store/products.html?price=down&here_we_can_have_a_lot_of_different_params_in_whatever_order 

В принципе, просто принять это $ var1, а остальные ждем URL? Как я могу это сделать?

P.S. Я думаю, я нашел решение:

RewriteRule ^store/([a-zA-Z0-9\_\-]+).html?(.*)/?$ store.php?var1=$1&%{QUERY_STRING} [L] 
+0

любая причина, по которой вы не можете сделать это прямо в php? возможно, добавив условие перезаписи? –

+0

> любая причина, по которой вы не можете сделать это прямо в php? Не уверен, что вы имели в виду. Мне нужно, чтобы этот URL-адрес передавался способом, описанным выше, я просто не очень хорош с mod_rewrite, к сожалению, и поиск в Google для ответа не помог. – Paul

ответ

0

Проблема ваша посылка относительно того, как RewriteRule работ. A RewriteRuleтолько соответствует пути URI (в терминах apache URI запроса), а не по строке запроса. Это означает, что (.*)/?$ в конце вашего регулярного выражения работает только потому, что он может уменьшить до всего лишь «$» (или в конце строки) и ? прежде, чем это просто означает, что регулярное выражение будет соответствовать .htm, а также .html

проще версия данного правила заключается в следующем:

RewriteRule ^store/([a-zA-Z0-9\_\-]+).html store.php?var1=$1 [L,QSA] 

QSA означает Query String Append, который просто добавляет обратно любую существующую строку запроса к переписанной URL.