使用多个参数重写 htaccess 中的规则

rewrite rule in htaccess with multiple parameter

由于 htaccess 中的一些错误编码,我的下载文件出现问题,这是我的 htaccess 代码 url

URL:

https//www.example.com/download.php?fil=`<?php echo $nm ; ?>`&fpath=`<?php echo $fpath ; ?>`&ntid=`<?php echo $ntid ; ?>`

$nm= b5fgh68dsk3nlxz.pdf , 
$fpath= ..uploads/45 ,
$ntid= 146

现在 htaccess 是

RewriteEngine ON
RewriteRule ^n9/([a-zA-Z0-9!@#$-_]*)/([a-zA-Z0-9!@#$-_]*)/([0-9]+)$     download.php?fil=&fpath=&ntid=

现在的问题是通常没有 htaccess 文件可以轻松下载,但是有 htaccess 下载无法建立

url 负责 htaccess

https://www.example.com/n9/b5fgh68dsk3nlxz.pdf/..uploads/45/146

..uploads 部分看起来也可能是一个漏洞,如果您不小心,人们可能会获得服务器上任何文件的来源。 但是,如果您的 download.php 文件在提供文件内容之前采取了预防措施,我会寻求一种解决方法来保留您的斜杠。从生成 link 的 PHP 文件中,我会这样做:

<?php
function base64url_encode($data) { 
return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); 
} 
?>
<a href="https://www.example.com/n9/<?php echo base64url_encode($nm) ; ?>/<?php echo base64url_encode($fpath); ?>/<?php echo base64url_encode($ntid); ?>">download</a>

然后从你的 download.php 在顶部我会使用:

<?php 
function base64url_decode($data) { 
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)); 
}
if(isset($_GET['fil']))$_GET['fil']=base64url_decode($_GET['fil']); 
if(isset($_GET['fpath']))$_GET['fpath']=base64url_decode($_GET['fpath']); 
if(isset($_GET['ntid']))$_GET['ntid']=base64url_decode($_GET['ntid']);
?>

最后,使用可以通过以下清理.htaccess:

RewriteRule ^n9/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ download.php?fil=&fpath=&ntid=