我试图建立一个简单的网站,让用户上传文件,并与其他指定用户私下分享。问题是:我不希望任何人能够输入文件的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页面访问它。
答案 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]