Ответ 1
Это не работает, потому что у вас нет флага 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
СОВЕТ. Если вы ищете продукты с использованием имени, вы можете увидеть задержку в запросе, если у вас нет индекса. Вы должны изучить это, прежде чем он станет уродливым.