Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php URL重写以私下访问文件_Php_Apache_.htaccess_Mod Rewrite_Redirect - Fatal编程技术网

Php URL重写以私下访问文件

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

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

我决定尝试使用.htaccess来阻止直接的url访问,但是,我自己不知道如何访问该文件。所有上传的文件都将进入一个名为restricted的子文件夹

我的.htaccess文件是:

My showfile.php文件:

<?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');
?>