apache mod_rewrite 问题,需要解析多个参数

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

看来您正在尝试匹配“模式”中的查询字符串。这不是正确的做法。

尝试一下这个:

RewriteEngine On
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?

答案2

我认为当点出现在范围括号内时,您必须将其转义。否则它会匹配“任何内容”。如果是这种情况,您的第一个捕获组将吞噬所有可用字符,而其他捕获组将不会得到任何内容。

像这样

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

相关内容