我使用.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
它不起作用,因为你没有 A-Z
或者 [NC]
旗。
使用[NC]标志会使RewriteRule在a中匹配
不区分大小写的方式。也就是说,它不关心是否是字母
在匹配的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中的最后一个命令,或
C中的break命令。使用此标志指示当前
应立即应用规则而不考虑进一步的规则。
和QSA标志:
当替换URI包含查询字符串时,默认行为
RewriteRule是丢弃现有的查询字符串,并替换它
用新生成的。使用[QSA]标志会导致查询
要组合的字符串。
有关标志的更多信息: http://httpd.apache.org/docs/2.3/rewrite/flags.html
提示:如果您正在寻找使用该名称的产品,您可能会在查询中看到延迟,特别是如果您没有索引。你应该在它变得难看之前研究它。
它不起作用,因为你没有 A-Z
或者 [NC]
旗。
使用[NC]标志会使RewriteRule在a中匹配
不区分大小写的方式。也就是说,它不关心是否是字母
在匹配的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中的最后一个命令,或
C中的break命令。使用此标志指示当前
应立即应用规则而不考虑进一步的规则。
和QSA标志:
当替换URI包含查询字符串时,默认行为
RewriteRule是丢弃现有的查询字符串,并替换它
用新生成的。使用[QSA]标志会导致查询
要组合的字符串。
有关标志的更多信息: http://httpd.apache.org/docs/2.3/rewrite/flags.html
提示:如果您正在寻找使用该名称的产品,您可能会在查询中看到延迟,特别是如果您没有索引。你应该在它变得难看之前研究它。
你只是在寻找小写字母(和数字)。您需要添加大写字母。
RewriteEngine On
RewriteRule ^product/([A-Za-z0-9\-]+).html$ products.php?name=$1