Apache RewriteRule RegEx 未按预期工作

Apache RewriteRule RegEx not working as intended

我想重写 URLs:

/Files/ANYFILENAMEHERE?token=ANYTOKENHERE

/do_download.php?file=ANYFILENAMEHERE&token=ANYTOKENHERE

为此,我在 .htaccess 中使用以下规则:

RewriteEngine On
RewriteRule ^Files\/([^\?]+)\?token=([a-z0-9]+)$ do_download.php?file=&token= [L]

但是,URL 不会被重写。它只是 returns 一个 404 错误。 在 Regex101PCRE 模式下,但由于某种原因它匹配。

为什么会这样,我该如何解决?我是不是在某个地方犯了一个愚蠢的错误?

我的 Apache 版本是 2.2.31 (Unix) 顺便说一句。

您无法匹配重写规则中的查询字符串。

试试这个:

RewriteCond %{QUERY_STRING} token=([^&]+)(&|$)
RewriteRule ^Files/(.+) /do_download.php?file=&token=%1

此处重写条件在查询字符串中查找标记,而重写规则处理文件名。

此处演示:http://htaccess.mwl.be?share=fa3b4b46-b0c9-5406-a25b-605ca687d8bd