问题 .htaccess产品(String)


我使用.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 

9398
2017-12-23 22:42


起源



答案:


它不起作用,因为你没有 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

提示:如果您正在寻找使用该名称的产品,您可能会在查询中看到延迟,特别是如果您没有索引。你应该在它变得难看之前研究它。


12
2017-12-23 22:43



+1为 [NC] 旗。不知道那一个。 - Rocket Hazmat
谢谢它的工作,今晚我会更聪明地睡觉 - 谢谢你的解释,非常有用。 - dale
欢迎您,欢迎来到stackoverflow! - Book Of Zeus


答案:


它不起作用,因为你没有 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

提示:如果您正在寻找使用该名称的产品,您可能会在查询中看到延迟,特别是如果您没有索引。你应该在它变得难看之前研究它。


12
2017-12-23 22:43



+1为 [NC] 旗。不知道那一个。 - Rocket Hazmat
谢谢它的工作,今晚我会更聪明地睡觉 - 谢谢你的解释,非常有用。 - dale
欢迎您,欢迎来到stackoverflow! - Book Of Zeus


你只是在寻找小写字母(和数字)。您需要添加大写字母。

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

2
2017-12-23 22:44