.htaccess с продуктами (строка)

Я использую .htaccess, и у меня есть правило, которое позволяет мне динамически искать продукт в моей базе данных.

чтобы кто-то мог нажать на ссылку, подобную этой:

www.domain.com/product/modular-plastic-lunch-set.html

и посмотреть продукт. Теперь моя проблема, когда я использую

www.domain.com/product/modular-plastic-lunch-set.html

он не работает,

почему? здесь мои правила:

RewriteEngine On
RewriteRule ^product/([a-z0-9\-]+).html$ products.php?name=$1 

Ответ 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

СОВЕТ. Если вы ищете продукты с использованием имени, вы можете увидеть задержку в запросе, если у вас нет индекса. Вы должны изучить это, прежде чем он станет уродливым.

Ответ 2

Вы ищете только строчные буквы (и цифры). Вам нужно добавить буквы верхнего регистра.

RewriteEngine On
RewriteRule ^product/([A-Za-z0-9\-]+).html$ products.php?name=$1