.htaccess与产品(String)

dal*_*ale 11 php string .htaccess mod-rewrite

我使用.htaccess,我有一个规则,允许我在我的数据库中动态查找产品.

所以有人可以点击这样一个链接:

www.domain.com/product/modular-plastic-lunch-set.html
Run Code Online (Sandbox Code Playgroud)

并看到产品.现在我的问题是,当我使用时

www.domain.com/product/Modular-Plastic-Lunch-Set.html
Run Code Online (Sandbox Code Playgroud)

这是行不通的,

为什么?这是我的规则:

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

Boo*_*eus 12

它不起作用,因为你没有A-Z[NC]标志.

使用[NC]标志会使RewriteRule以不区分大小写的方式匹配.也就是说,它不关心字母在匹配的URI中是以大写形式还是小写形式出现.

RewriteRule ^product/([a-z0-9\-]+).html$ php.php?name=$1 [NC,L,QSA]
Run Code Online (Sandbox Code Playgroud)

要么

RewriteRule ^product/([a-zA-Z0-9\-]+).html$ php.php?name=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

我加了L:

[L]标志使mod_rewrite停止处理规则集.在大多数情况下,这意味着如果规则匹配,则不会处理其他规则.这对应于Perl中的最后一个命令,或C中的break命令.使用此标志指示应立即应用当前规则而不考虑其他规则.

和QSA标志:

当替换URI包含查询字符串时,RewriteRule的默认行为是丢弃现有查询字符串,并将其替换为新生成的查询字符串.使用[QSA]标志会导致组合查询字符串.

有关标志的更多信息,请访问:http://httpd.apache.org/docs/2.3/rewrite/flags.html

提示:如果您正在寻找使用该名称的产品,您可能会在查询中看到延迟,特别是如果您没有索引.你应该在丑陋之前调查一下.