我一直在努力让以下重写工作
^/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\._\-]+)