为什么.htaccess中的正则表达式不匹配?

时间:2012-04-05 16:00:53

标签: regex .htaccess mod-rewrite

我有以下一行:

RewriteRule ^page.php?var1=([0-9]+)&var2=(.*)&var3=(.*)$ index.php?module=page&var1=$1

当我使用此url访问目录时:page.php?var1 = 24& var2 = 346adf& var3 = asdf

它没有正则表达式。谁有线索?

3 个答案:

答案 0 :(得分:2)

基本上你的规则不正确。原因:您只能使用RewriteRule匹配REQUEST_URI,但不能匹配那里的QUERY字符串。

将您的代码更改为此内容以使其正确无误:

RewriteCond %{QUERY_STRING} ^var1=([0-9]+)&var2=[^&]*&var3=.*$ [NC]
RewriteRule ^page\.php/?$ index.php?module=page&var1=%1 [L,NC,QSA]

答案 1 :(得分:1)

我注意到的第一件事就是?应该逃脱。

答案 2 :(得分:1)

除了遗漏转义符之外,查询字符串(?之后的内容)不是RewriteRule匹配的一部分。 如果要匹配查询字符串,则必须使用其他RewriteCond。 例如:

RewriteCond %{QUERY_STRING} ^foo=([^&]+)&bar$
RewriteRule ^page\.php$ otherpage.php?x=%1 [QSA]

我不推荐这个。最好在脚本中解析查询字符串。