Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mod_rewrite将变量重定向到php文件?_Php_Html - Fatal编程技术网

使用mod_rewrite将变量重定向到php文件?

使用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]

对于我的站点,假设我在一个名为“下载”的文件夹中有一个文件

因此,该文件的直接链接是www.testing.com/download/file.exe

我想像这样抛出一个授权令牌,…/download/file.exe?auth=asdffg122**,其中auth令牌是来自时间和到期的哈希。到目前为止,我已经在.htaccess文件中编写了:

 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 for
RewriteCond%{QUERY\u STRING}…
示例。查询字符串在进入
RewriteRule
之前被剥离,因此您不能像这样匹配它。如果非常需要匹配,可以在
RewriteCond
上使用
%{QUERY\u STRING}
和使用
%n
替换的后续
RewriteRule
命令中使用的匹配组对其进行匹配(与
$n
相反)。重写后,
[QSA]
标记会将查询字符串追加回去,并将其与您在规则目标上添加的任何内容相结合。我不需要匹配它,只需要将它传递到php文件。