mod_rewrite不匹配regexp

时间:2014-05-26 17:14:58

标签: php regex apache .htaccess mod-rewrite

我有一个regexp似乎在测试时工作正常at regexp101.com 但这并没有给我在mod_rewrite中的相同结果。

因此,我试图重写的URL是:

/modeles-voiture/Nissan/Qashqai+2

预期结果是:

/modeles.php?brand=Nissan&model=Qashqai+2

重写规则:

RewriteCond %{REQUEST_URI} ^/?modeles-voiture [NC]

RewriteRule \/([A-Z][\-A-Za-z]+)\/([\+\-A-Za-z0-9]+$) /modeles.php?brand=$1&model=$2 [L]

我从重写规则中得到的是:

/modeles-voiture/Nissan/Qashqai 2

请注意缺少的+号,它会在modeles.php

中抛弃我的脚本

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我想你想要[B]旗帜。

看看这个问题的答案:How to encode special characters using mod_rewrite & Apache?

  

然后mod_rewrite会更改您的请求' / tag / c ++' to' script.php?tag = c ++'。但是在application / x-www-form-encoded格式的查询字符串组件中,转义规则与路径部分中应用的规则略有不同。特别是' +'是空间的简写(也可以编码为'%20',但这是我们现在永远无法改变的旧行为。)

     

因此,PHP的表单阅读代码接收了“c ++”和“c ++”。并将其作为C空间空间转储到_GET中。