У меня есть структура моей сети http://example.com/category_name/product_name
. Я переписываю его на PHP, используя следующее RewriteRule:
RewriteRule ^(.*)/(.*)/$ detail-produktu.php?kategorie=$1&nazev=$2
Но проблема возникает, когда я пытаюсь переписать адрес http://example.com/user/david
. Этот URL-адрес всегда начинается с /user
, поэтому я хочу переписать его так:
RewriteRule ^user/(.*)/$ index.php?user=$1
Но все же URL с /user
идет в detail-produktu.php
.
Что я могу сделать?
У вас есть несколько потенциальных проблем.
Указанный вами URL (http://example.com/user/david
) не заканчивается косой чертой, но RewriteRule
шаблон включает в себя косую черту в конце, поэтому не будет совпадать.
Вам нужно будет включить L
флаг, чтобы остановить процесс перезаписи (по крайней мере, текущий раунд обработки в .htaccess
), иначе запрос, скорее всего, будет перехвачен другим правилом.
Порядок имеет значение. Самые конкретные правила должны быть первыми. Итак, правило ловить /user
запрос должен быть первым.
Например:
RewriteRule ^user/([^/]+)$ index.php?user=$1 [L]
RewriteRule ^([^/]+)/(.*)$ detail-produktu.php?kategorie=$1&nazev=$2 [L]
Я удалил косую черту в конце шаблон. Добавьте это обратно, если требуется косая черта в конце. Я также сделал шаблон немного более ограничительным, чтобы он соответствовал сегментам всего пути, а не что-нибудь.