我有以下一行:
RewriteRule ^page.php?var1=([0-9]+)&var2=(.*)&var3=(.*)$ index.php?module=page&var1=$1
当我使用此url访问目录时:page.php?var1 = 24& var2 = 346adf& var3 = asdf
它没有正则表达式。谁有线索?
答案 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]
我不推荐这个。最好在脚本中解析查询字符串。