2016-11-01 3 views
0

Хорошо, у меня небольшие проблемы с .htaccess, так как я начинаю с ним. Это то, чего я пытаюсь выполнить.htaccess - переписать URL-адрес с двумя правилами

URL DESIRED: example.com/package/forest/

Что я сейчас:

RewriteRule ^package/forest/$ 
/deep/file/do_stuff.php?action=package&location=forest [R=301,QSA,L] 

Это работает, как задумано, когда вы идете в example.com/package/forest вы получаете страницу, создаваемую do_stuff.php. Жесткая часть, которую я не могу получить, - это то, что если я хочу отправить дополнительные переменные GET на страницу do_stuff, но сохраните один и тот же URL.

ПУСК URL: example.com/package/forest/list/5/2015-10-03

ЕЩЕ ХОЧЕТ URL: example.com/package/forest

Разница в том, , Я хочу переписать или перенаправить, не уверен, что срок будет

/deep/file/do_stuff.php?action=package&location=forest&pictures=5&date=2015-10-03 

на этот раз.

Не знаете, как складывать правила, чтобы в итоге я получил один и тот же URL-адрес, независимо от того, передают ли они дополнительные переменные или нет.

ответ

0
RewriteRule ^package/forest/list/(\d)/(\d{4}-\d{2}-\d{2})$ package/forest/deep/file/do_stuff.php?action=package&location=forest&pictures=$1&date=$2 

Регулярное выражение захватывает две группы: одну с одной цифрой и одну с датой. Они используются позже как $ 1 и $ 2.

К сожалению, я не могу проверить это, поскольку я использую nginx, поэтому я не уверен на 100%, если я прав. Я думал о том, будет ли uri снова перезаписываться после первого переписывания, потому что «package/forest /» все равно будет соответствовать, но знак доллара в конце строки должен помешать любому uri дольше, чем соответствовать. По этой же причине вам не нужно беспокоиться о штабелировании; первое правило будет применяться только к кратковременному завершению uri с помощью «forest /», второе - только для тех, у кого есть дата в конце.
С другой стороны, мне интересно, почему вы используете флаг QSA. Ури, содержащий запрос, никогда не будет соответствовать из-за знака доллара.

Смежные вопросы