使用mod_rewrite将变量重定向到php文件?
对于我的站点,假设我在一个名为“下载”的文件夹中有一个文件 因此,该文件的直接链接是www.testing.com/download/file.exe 我想像这样抛出一个授权令牌,…/download/file.exe?auth=asdffg122**,其中auth令牌是来自时间和到期的哈希。到目前为止,我已经在.htaccess文件中编写了:使用mod_rewrite将变量重定向到php文件?,php,html,Php,Html,对于我的站点,假设我在一个名为“下载”的文件夹中有一个文件 因此,该文件的直接链接是www.testing.com/download/file.exe 我想像这样抛出一个授权令牌,…/download/file.exe?auth=asdffg122**,其中auth令牌是来自时间和到期的哈希。到目前为止,我已经在.htaccess文件中编写了: RewriteEngine on RewriteRule \(.*)$.(exe)$ check.php?file=$1?auth=$2 [QSA]
RewriteEngine on
RewriteRule \(.*)$.(exe)$ check.php?file=$1?auth=$2 [QSA]
我想将文件名传递给变量$1,将auth标记传递给变量$2。有办法做到这一点吗?您可能想要或应该写的是:
RewriteRule ^(.*\.exe)$ check.php?file=$1 [QSA]
如果将重写规则放入下载文件夹,则前导的\
反斜杠应该是^
开始锚定符。您也只能有一个$
主题结束标记(通常)。要断言文件扩展名,请将其移动到括号中。整个(.*\.exe)
变为$1
当您使用[QSA]
时,?auth=abc22
自动附加为&auth=abc22
。这样,添加一个$2
就变得多余了。(无论如何,您需要一个单独的重写条件来匹配查询字符串。它不是重写路径的一部分。)
有关更多示例,请参见。像这样吗
RewriteEngine on
RewriteCond %{QUERY_STRING} .*auth=(.*)\&*.*$
RewriteRule ^.*\/(.*\.exe)$ check.php?file=$1&auth=%n
假设将auth=添加到GET请求中
编辑:根据来自$@Orbling的注释进行修改是否希望在htaccess文件中生成auth值?否创建链接时将生成auth值。我只想将变量传递给php文件。或者实际文件名可以是file.exe,然后下载链接将是file_dummy.exe?auth=**hash**。。然后将文件名和散列传递到php中,但链接看起来像是直接链接到文件。谢谢您的回答,您是说(.\.exe)何时传递到$1。。file.exe?auth=abc22=$1?在
?
问号变为$1
之前,仅显示零件。重写规则看不到查询字符串。有关详细信息,请参阅。如何继续为查询编写重写规则?类似于重写(^.\?)$。。然后传给我?还是不?很抱歉问了这么多问题lolGoogle forRewriteCond%{QUERY\u STRING}…
示例。查询字符串在进入RewriteRule
之前被剥离,因此您不能像这样匹配它。如果非常需要匹配,可以在RewriteCond
上使用%{QUERY\u STRING}
和使用%n
替换的后续RewriteRule
命令中使用的匹配组对其进行匹配(与$n
相反)。重写后,[QSA]
标记会将查询字符串追加回去,并将其与您在规则目标上添加的任何内容相结合。我不需要匹配它,只需要将它传递到php文件。