Apache RewriteRule RegEx未按预期工作

时间:2017-09-18 16:23:06

标签: apache .htaccess mod-rewrite pcre apache2.2

我想重写网址:

Y = array([[3, 1, 4, 5], [0, 3, 0, 3], [1, 2, 3, 4])

/Files/ANYFILENAMEHERE?token=ANYTOKENHERE

为此我在/do_download.php?file=ANYFILENAMEHERE&token=ANYTOKENHERE 中使用以下规则:

.htaccess

但是,URL不会被重写。它只返回RewriteEngine On RewriteRule ^Files\/([^\?]+)\?token=([a-z0-9]+)$ do_download.php?file=$1&token=$2 [L] 错误。 在404模式下的 Regex101 ,但由于某种原因它匹配。

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

我的Apache版本是PCRE btw。

1 个答案:

答案 0 :(得分:0)

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

请改为尝试:

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

这里重写条件在重写规则处理文件名时查询查询字符串中的标记。

在这里演示:http://htaccess.mwl.be?share=fa3b4b46-b0c9-5406-a25b-605ca687d8bd