2010-01-05 82 views
1

我一直在努力得到以下重写工作Apache的mod_rewrite的多参数

^/agatedepot/([0-9.]+)/([0-9a-zA-Z._]+)\?doc-id=([0-9a-zA-Z._\-]+) 

/agateDepot.php?date=$1&filename=$2&doc-id=$3 

我知道mod_rewrite的工作。我知道它正在读取.htaccess文件,我只是没有看到任何重定向发生。这是我的.htaccess文件中的内容

RewriteEngine On 
RewriteRule ^/agatedepot/([0-9.]+)/([0-9a-zA-Z._]+)\?doc-id=([0-9a-zA-Z._\-]+) /agateDepot.php?date=$1&filename=$2&doc-id=$3 

任何帮助将不胜感激。我想这是简单的,但我一直无法弄清楚。在Apache的错误日志和访问日志中没有错误被简单地记录404

+1

这个问题更适合ServerFault。 – 2010-01-05 19:25:18

+0

你应该给出一个测试的具体URL的例子。 – 2010-01-05 19:31:19

+0

确保 /agatedepot/2010.01.03/a_bunch_of_text.txt?doc-id=xt.l.nfl.com.7182032 – GrumpyCanuck 2010-01-05 19:33:09

回答

3

网址查询不是URL路径的一部分,因此不能与RewriteRule进行处理。这里您需要额外的RewriteCond directive。另外,当在.htaccess文件中使用mod_rewrite时,在测试规则之前移除了每个目录的路径前缀,并在应用规则后追加。所以在你的情况下,你需要从你的模式中删除领先的/

RewriteCond %{QUERY_STRING} ^doc-id=([0-9a-zA-Z._\-]+)$ 
RewriteRule ^agatedepot/([0-9.]+)/([0-9a-zA-Z._]+)$ agateDepot.php?date=$1&filename=$2&doc-id=%1 
+0

完美。非常感谢! – GrumpyCanuck 2010-01-05 20:06:40

+0

如果您只是想将原始请求的查询追加到新的查询中,您还可以设置* QSA *标志。 – Gumbo 2010-01-05 20:07:34

-1

尝试添加RewriteBase /并跳过第一个斜杠(即^agatedepot...

0

问号?标志着查询字符串的开始,因此,它没有被RewriteRule分析。您应该更换?或使用RewriteCond %{QUERY_STRING} ...进行分析。