使用多个参数重写 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=
由于 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=