.htaccess url rewrite удалить 2 id

Nov 02 2020

Можно ли удалить 2 параметра идентификатора URL-адреса и просто показать номер. В настоящее время у меня есть такой URL:

http://localhost/photo_gallery/public/product_configurator.html?prometheus_id=10082&id=73

Необходимый URL:

http://localhost/photo_gallery/public/product_configurator.html/10082&73

.htaccess

RewriteEngine on
RewriteRule ^(.*).html $1.php RewriteRule ^product_configurator.php/(\d+)$ product_configurator.php?prometheus_id=$1&id=$2 [NC,L]

Возможно ли это?

Ответы

MrWhite Nov 02 2020 at 20:03

Я предполагаю (глядя на ваши директивы), что ваш .htaccessфайл находится по адресу /photo_gallery/public/.htaccess.

RewriteRule ^product_configurator.php/(\d+)$ product_configurator.php?prometheus_id=$1&id=$2 [NC,L]

Это близко, хотя у вас есть только один подшаблон захвата (т.е. (\d+)), но у вас есть две обратные ссылки (т.е. $1и $2) в строке подстановки . Вы также сопоставляете только цифры ( \d), тогда как шаблон, который вы хотите сопоставить, содержит &- не цифру. Таким образом, приведенное выше просто не будет соответствовать.

Вы также ввели .phpрасширение, а опубликованные вами примеры URL-адресов состоят из .html. Я предполагаю , что вы уже переписывания .htmlк .php(как это было предложено вашими директивами). Однако вы должны делать это напрямую с помощью одной директивы.

Ваша перезапись для изменения расширения с .htmlна .php(т. Е. RewriteRule ^(.*).html $1.php) Также перезапишет информацию, которую вы пытаетесь сопоставить, поскольку она включена в URL-путь.

Вместо этого попробуйте следующее:

RewriteEngine On

# Rewrite "product_configurator.html/10082&73"
RewriteRule ^(product_configurator)\.html/(\d+)&(\d+)$ $1.php?prometheus_id=$2&id=$3 [L]

Мы захватываем product_configuratorстроку из запроса (в $1обратную ссылку), чтобы сохранить повторение в строке подстановки . $2а $3затем представляют значения до и после &в URL-пути.

Я снял этот NCфлаг, чтобы предотвратить потенциальную проблему "дублированного контента". Если вам специально не требуется совпадение без учета регистра, NCфлага следует избегать.

А потом...

# Rewrite other ".html" requests to ".php"
RewriteRule (.+)\.html$ $1.php [L]