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