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
错误。
在 Regex101 在 PCRE
模式下,但由于某种原因它匹配。
为什么会这样,我该如何解决?我是不是在某个地方犯了一个愚蠢的错误?
我的 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
我想重写 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
错误。
在 Regex101 在 PCRE
模式下,但由于某种原因它匹配。
为什么会这样,我该如何解决?我是不是在某个地方犯了一个愚蠢的错误?
我的 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