Назад | Перейти на главную страницу

.htaccess переписывается неправильно

У меня есть структура моей сети 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.

Что я могу сделать?

У вас есть несколько потенциальных проблем.

  1. Указанный вами URL (http://example.com/user/david) не заканчивается косой чертой, но RewriteRule шаблон включает в себя косую черту в конце, поэтому не будет совпадать.

  2. Вам нужно будет включить L флаг, чтобы остановить процесс перезаписи (по крайней мере, текущий раунд обработки в .htaccess), иначе запрос, скорее всего, будет перехвачен другим правилом.

  3. Порядок имеет значение. Самые конкретные правила должны быть первыми. Итак, правило ловить /user запрос должен быть первым.

Например:

RewriteRule ^user/([^/]+)$ index.php?user=$1 [L]
RewriteRule ^([^/]+)/(.*)$ detail-produktu.php?kategorie=$1&nazev=$2 [L]

Я удалил косую черту в конце шаблон. Добавьте это обратно, если требуется косая черта в конце. Я также сделал шаблон немного более ограничительным, чтобы он соответствовал сегментам всего пути, а не что-нибудь.