2010-08-27 183 views
0

我知道一些冲突,但作为一个国防部重写麻瓜是时候寻求帮助。apache重写冲突

我重新写http://test.com/[name]/
http://test.com/script.php?id=[name]
成功,使用:

(rule#1) 
RewriteRule ^(.*)\/$ script.php?id=$1&%{QUERY_STRING} [L] 

接下来,我重写http://test.com/[name]/foobar/[key]
http://test.com/script.php?id=[name]&foobar=[key]
也成功使用:

(rule#2) 
RewriteRule ^(.*)\/foobar/([0-9]+)$ script.php?id=$1&foobar=$2 [L] 

何wever,当我尝试包括查询字符串,
使http://test.com/[name]/foobar/[key]?p=[page]
可以重新写入http://test.com/script.php?id=[name]&foobar=[key]&p=[page]
本:

(rule#3) 
RewriteRule ^(.*)\/foobar/([0-9]+)$ script.php?id=$1&foobar=$2&%{QUERY_STRING} [L] 

然后阿帕奇只是投我回到http://test.com/script.php。该规则#3

我知道,从试验和错误会工作,如果它没有使用相同的script.php的规则#1,
但我不知道如何解决它,所以任何帮助表示赞赏!

Arrgh ..在用Gumbo的例子仔细检查我的规则后,我终于发现出了什么问题。虽然不完美,但我的重写规则实际上是按照预期工作的。然而,我完全忘记了我有另一个脚本来检查有效的参数......显然,抛出随机测试值,有时不是一个好主意。感谢^ /伎俩!

回答

0

警告:您正在使用.*,它实际上什么都不匹配。使用.+,除非它意图不匹配任何东西。

是否已将所有规则列在此处?您的error_log中是否有任何错误?

2

使用[^/]+匹配除了/,而不是.*任意数量的任意字符只有一个或多个任意字符:

RewriteRule ^([^/]+)/$ script.php?id=$1&%{QUERY_STRING} [L] 
RewriteRule ^([^/]+)/foobar/([0-9]+)$ script.php?id=$1&foobar=$2 [L] 

此外,您可以设置QSA标志有自动追加原请求的查询到新的网址而不是手动添加:

RewriteRule ^([^/]+)/$ script.php?id=$1 [L,QSA]