URL重写为私有访问文件

时间:2015-08-19 13:24:37

标签: php apache .htaccess mod-rewrite redirect

我试图建立一个简单的网站,让用户上传文件,并与其他指定用户私下分享。问题是:我不希望任何人能够输入文件的URL以便能够访问它(然后任何人都可以看到它)。

我决定尝试使用Ext.define('ylp2p.controller.viewdata',{ extend: 'Ext.app.Controller', config: { control: { viewlabel: { show: 'viewlabelFn' } }, refs: { viewlabel: '#datalabel', } }, viewlabelFn: function(){ alert('painted'); }, launch: function() { this.getViewlabel().show(); } }); 来阻止直接访问网址,但是,我无法弄清楚如何自己访问该文件。所有上传的文件都将进入名为"受限制" 子文件夹

我的.htaccess文件是:

".htaccess"

我的" showfile.php"文件:

RewriteEngine on
RewriteCond {%QUERY_STRING} !^.*key=SECRET.*$ [NC]
RewriteRule ^restricted/(.*)$ showfile.php?file=$1

但是,当我在受限文件夹中打开<?php echo file_get_contents('[...]/restricted/'.$_GET['file'].'?key=SECRET'); ?> 或其他文件时,它成功重定向到"restricted/test.txt",但是,我收到了一个php错误:

  

警告:file_get_contents([...] / restricted / test.txt?key = SECRET)   [function.file-get-contents]:无法打开流:没有这样的文件或   第10行的[...] / showfile.php中的目录

即使查询字符串包含"showfile.php?file=test.txt",它似乎仍在尝试重定向。

我想要的是:我希望它重定向直接URL访问,但我可以通过重定向到的php页面访问它。

2 个答案:

答案 0 :(得分:3)

如果要将文件作为HTTP资源而不是直接磁盘访问(如问题所示),则可以执行以下操作:

.htaccess中的代码(放置&#34; nonpublic_test&#34;文件夹):

<?php
echo file_get_contents('http://www.domain.name.here/restricted/'.$_GET['file'].'?key=SECRET');
?>

然后在你的showfile.php中:

onReceive

这将阻止对受限文件夹及其内容的任何访问,但仍允许showfile.php脚本访问该文件夹中的文件并将其输出。

答案 1 :(得分:1)

最好将restricted文件夹移到站点根目录以上的某个级别,并将您的PHP代码放在showfile.php中,如下所示:

<?php
   echo file_get_contents('/path/to/restricted/'.$_GET['file']);
?>

规则简单如下:

RewriteEngine on

RewriteRule ^restricted/(.*)$ showfile.php?file=$1 [L,QSA,NC]