这有效:
$filename = realpath($_GET['filename']); if (strpos($filename, '/full/path/to/special') !== 0) { die(); }
如果文件名的实际路径不是以该字符串开头,则会中止。
设置dir树的自动前置不是更简单吗?
$filename = basename($_GET['filename']);
将只留下任何给定字符串的文件名
首先,从你的mod_rewrite规则中删除'/ special'部分,不需要它,你只需要一个文件名。
然后尝试这个:
$your_dir = '/full/path/to/special'; $filename = basename($_GET['filename']); if (file_exists($your_dir . '/' . $filename)) { include($filename); }
basename()将切断$ filename的任何路径。