Php URL重写以私下访问文件
我正在尝试建立一个简单的网站,让用户上传文件,并与其他指定用户私下共享。问题是:我不希望任何人能够键入url,以便文件能够访问它,然后任何人都可以看到它 我决定尝试使用.htaccess来阻止直接的url访问,但是,我自己不知道如何访问该文件。所有上传的文件都将进入一个名为restricted的子文件夹 我的.htaccess文件是: My showfile.php文件:Php URL重写以私下访问文件,php,apache,.htaccess,mod-rewrite,redirect,Php,Apache,.htaccess,Mod Rewrite,Redirect,我正在尝试建立一个简单的网站,让用户上传文件,并与其他指定用户私下共享。问题是:我不希望任何人能够键入url,以便文件能够访问它,然后任何人都可以看到它 我决定尝试使用.htaccess来阻止直接的url访问,但是,我自己不知道如何访问该文件。所有上传的文件都将进入一个名为restricted的子文件夹 我的.htaccess文件是: My showfile.php文件: <?php echo file_get_contents('[...]/restricted/'.$_GET['fil
<?php
echo file_get_contents('[...]/restricted/'.$_GET['file'].'?key=SECRET');
?>
但是,当我打开restricted/test.txt或restricted文件夹中的其他文件时,它成功地重定向到showfile.php?file=test.txt,但是,我收到一个php错误:
警告:文件获取内容[…]/restricted/test.txt?key=SECRET
[function.file get contents]:无法打开流:没有此类文件或
第10行[…]/showfile.php中的目录
看起来,即使查询字符串包含key=SECRET,它仍在尝试重定向
我想要的:我希望它在直接URL访问时重定向,但我可以通过它重定向到的php页面访问它。最好将受限文件夹移动到站点根目录之上的一个级别,并在showfile.php中使用您的php代码,如下所示:
<?php
echo file_get_contents('/path/to/restricted/'.$_GET['file']);
?>
如果希望以HTTP资源而不是像问题中那样直接访问磁盘来访问文件,可以执行以下操作: 代码在.htaccess中放置在非公共_测试文件夹中:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^.*/restricted/.*$ [NC]
RewriteCond %{QUERY_STRING} !^.*key=SECRET.*$ [NC]
RewriteRule ^(.*)$ /$1 [R=403,L]
然后在showfile.php中:
<?php
echo file_get_contents('http://www.domain.name.here/restricted/'.$_GET['file'].'?key=SECRET');
?>
这将阻止对受限文件夹及其内容的任何访问,但仍然允许showfile.php脚本访问该文件夹内的文件并将其输出。请原谅我的无知,但如果要将受限文件夹移动到高于网站根目录的级别,那么网站根目录究竟是什么?那是public_html文件夹,还是mywebsite.com文件夹,或者其他什么?是的,那将是您的DocumentRoot文件夹,即public_html,无论您的main.htaccess位于何处。那么我如何从showfile.php引用该文件,例如test.txt?也就是说,例如,我的“/path/to/restricted”是什么?因为如果它不在public_html中,就没有url可以引用它,对吗?您仍然可以使用文件的文件系统路径访问DocumentRoot之外的受限文件夹中的文件,因为您没有使用http://route访问它。我试过了,当我转到url时,我看不到它很好,当我转到附加了?key=SECRET的url时,我确实认为它很好,但当我使用file\u get\u内容时,我仍然认为它不好?这与file_get_contents函数的工作原理有关吗?没关系,我刚刚意识到我应该将file_get_contents放在“http://[…]”中。我以前没有“http”。它现在起作用了。没错,我是从你的问题中抄来的。我现在编辑了答案,谢谢!
RewriteEngine on
RewriteCond %{REQUEST_URI} ^.*/restricted/.*$ [NC]
RewriteCond %{QUERY_STRING} !^.*key=SECRET.*$ [NC]
RewriteRule ^(.*)$ /$1 [R=403,L]
<?php
echo file_get_contents('http://www.domain.name.here/restricted/'.$_GET['file'].'?key=SECRET');
?>