Это не работает, потому что у вас нет ни A-Z
, ни флага [NC]
.
Использование флага [NC] приводит к совпадению RewriteRule в регистренечувствительным образом.То есть не имеет значения, отображаются ли буквы в верхнем или нижнем регистре в сопоставленном URI.
RewriteRule ^product/([a-z0-9\-]+).html$ php.php?name=$1 [NC,L,QSA]
или
RewriteRule ^product/([a-zA-Z0-9\-]+).html$ php.php?name=$1 [L,QSA]
Я добавил L:
Флаг [L] заставляет mod_rewrite остановить обработку набора правил.В большинстве случаев это означает, что если правило соответствует, дальнейшие правила не будут обрабатываться.Это соответствует последней команде в Perl или команде break в C. Используйте этот флаг, чтобы указать, что текущее правило должно применяться немедленно, без учета дальнейших правил.
и флаг QSA:
Когда заменяющий URI содержит строку запроса, RewriteRule по умолчанию отбрасывает существующую строку запроса и заменяет ее новой сгенерированной.Использование флага [QSA] приводит к объединению строк запроса.
Дополнительная информация о флагах: http://httpd.apache.org/docs/2.3/rewrite/flags.html
СОВЕТ: если вы ищете продуктыиспользуя имя, вы можете увидеть задержку в вашем запросе, в частности, если у вас нет индекса.Вы должны разобраться в этом, прежде чем он станет безобразным.