.htaccess rewrites wrong

I have a structure of my web http://example.com/category_name/product_name. I rewrite it to PHP by using the following RewriteRule :

RewriteRule ^(.*)/(.*)/$ detail-produktu.php?kategorie=$1&nazev=$2

But the problem occurs when I am trying to rewrite the address http://example.com/user/david. This URL Always starts with /user, so I want to rewrite it like this:

RewriteRule ^user/(.*)/$      index.php?user=$1

But still the URL with /user goes to detail-produktu.php.

What can I do?

2
задан 26 March 2017 в 11:24
1 ответ

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

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

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

  3. Ордер имеет значение. Наиболее специфические правила должны быть первыми. Итак, правило, чтобы поймать запрос /пользователя должно быть первым.

Например:

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

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

.
1
ответ дан 3 December 2019 в 12:36

Теги

Похожие вопросы