Переписать URL-адрес, содержащий путь к каталогу и параметры, в URL-адрес на основе параметров, используя как путь, так и строку запроса - PullRequest
0 голосов
/ 27 мая 2020

Я использую htaccess, чтобы переписать этот путь:

/inventory/products/tools/

на этот URL со строкой запроса:

/inventory.php?cat=products&type=tools

используя следующее правило:

RewriteRule ^inventory/(.*)/(.*)/? /inventory.php?cat=$1&type=$2 [L,R=301]

Когда я добавляю строку запроса к своему URL-адресу

/inventory/products/tools/?sort=pricehigh

и использую это правило

RewriteCond %{QUERY_STRING} ^(.*)$ [NC]
RewriteRule ^inventory/(.*)/(.*)/? /inventory.php?cat=$1&type=$2&%1 [L,R=301]

, я получаю перенаправление l oop, и строка URL-адреса перезаписывается снова и снова

Я пытаюсь получить следующий URL-адрес назначения

/inventory.php?cat=products&type=tools&sort=pricehigh

В приведенном выше примере правила я использую R = 301 для визуализации URL-адреса. В производстве я бы использовал только [L]

1 Ответ

1 голос
/ 28 мая 2020

Без завершающего sla sh второй (.*) также допускает сопоставление нулевых символов - поэтому из-за жадности регулярных выражений первый (.*) уже соответствует products/tools.

должно работать следующее:

RewriteRule ^inventory/([^/]+)/([^/]+)/?$ /inventory.php?cat=$1&type=$2 [QSA,L,R=302,NE]

([^/]+) требует одного или нескольких символов из класса символов, который содержит все, кроме /.

NE / * 1014 По какой-то причине здесь необходим флаг *, иначе результирующая строка запроса будет содержать ?cat=products%26type=... с URL-кодировкой &.

...