1

我有以下行:

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

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

它不执行正则表达式。有人有线索吗?

4

3 回答 3

2

基本上你的规则是不正确的。原因:您只能使用 REQUEST_URI 匹配,RewriteRule但不能匹配其中的 QUERY String。

将您的代码更改为此以使其正确:

RewriteCond %{QUERY_STRING} ^var1=([0-9]+)&var2=[^&]*&var3=.*$ [NC]
RewriteRule ^page\.php/?$ index.php?module=page&var1=%1 [L,NC,QSA]
于 2012-04-05T16:05:40.533 回答
1

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

于 2012-04-05T16:03:41.520 回答
1

除了缺少转义之外,查询字符串(后面的东西?)不是RewriteRule匹配的一部分。RewriteCond如果要匹配查询字符串,则必须使用附加项。例如:

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

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

于 2012-04-05T16:05:45.967 回答