如何解决htaccess临时重写规则
我目前在使用.htaccess来通过“临时”和唯一链接将客户端重定向到不同内容(具有不同的路径和扩展名)时遇到一个小问题。
让我用我已经得到的一些代码解释一下
.htaccess:
RewriteEngine on
RewriteRule (.+?)$ call.PHP?code=$1 [L,QSA]
call.PHP:
<?PHP
require_once("encryption.PHP");
if(isset($_GET['code']))
{
// decryption of the code
// the decrypted code is the content path
$clearCode = DecryptFunction(htmlspecialchars($_GET['code']));
if(strpos($clearCode,'.PHP') !== false)
{
include($clearCode);
}
else if(strpos($clearCode,'.jpeg') !== false)
{
$file_path_name = $clearCode;
$ctype= 'image/jpeg';
header('Content-Type: ' . $ctype);
$handle = fopen($file_path_name,"rb");
$contents = fread($handle,filesize($file_path_name));
fclose($handle);
echo $contents;
}
else if(strpos($clearCode,'.mp4') !== false)
{
$file_path_name = $clearCode;
$ctype= 'video/mp4';
header('Content-Type: ' . $ctype);
$handle = fopen($file_path_name,filesize($file_path_name));
fclose($handle);
echo $contents;
}
}
?>
在大多数情况下,此代码可以很好地工作,但是当请求大文件(例如视频)并在服务器端使用大量RAM时,可能会导致一些性能问题,因此我需要一种更有效的重定向客户端的方法。
最好是直接从.htaccess文件进行那些重定向,但是我不知道如何从那里检索解密的路径,我不确定是否可以。然后,我可以使用apache环境变量临时存储加密路径(作为var名称)和解密路径(作为值),然后在.htaccess中检索它们,就像这样:
<?PHP
require_once("encryption.PHP");
$filePath = "some/clear/path/to/encrypt.extension";
$encryptedpath = EncryptFunction($filePath);
putenv("$encryptedpath=$filePath");
?>
<!DOCTYPE html>
<html>
<body>
<img src = "<?PHP echo $encryptedpath;?>"/>
</body>
</html>
RewriteEngine on
RewriteRule (.+?)$ %{ENV:$1} [L,QSA]
即使我不确定它是否会非常有效,并且服务器上还需要一个循环脚本来定期转储env变量。
我还考虑过创建一个重写规则映射文件,并在旅途中使用PHP对其进行编辑,但是我真的不喜欢这种方法。
那么是否可以直接从.htaccess文件调用我的PHP解密函数并将客户端重定向到清晰路径?还是我没有提到的另一种方法?
我想我拥有对Apache服务器的完全控制权。
提前感谢您的回答:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。