如何阻止URL访问文件

时间:2014-02-05 23:14:35

标签: .htaccess http url

我有像

这样的子页面
mypage.com/subpage

但这只是别名,所有文件都在/data/subpage。并且只有用户自己需要访问的文件是index.php,所有其他文件都是由索引本身导入的,具体取决于属性(GET,会话等)。

我想要这个:

  • 让用户使用index.php而不是/subpage
  • 访问/data/subpage
  • 不要让用户直接访问/data/subpage及其子文件夹
  • 中的任何内容
  • 仍允许index.php访问这些文件。

我希望我把它写成可以理解。

感谢您的帮助

编辑:我当前的.htaccess(位于根目录)

RewriteEngine On

RewriteRule ^subpage$ /data/subpage/index.php [L]
RewriteRule ^subpage/(?:([^/]+)/?|)(?:([^/]+)/?|)$ /data/subpage/index.php?section=$1&subsection=$2 [L]
RewriteRule ^edit/subpage/?(?:([^/]+)/?|)(?:([^/]+)/?|)$ /data/subpage/index.php?edit=true&section=$1&subsection=$2 [L]

1 个答案:

答案 0 :(得分:1)

尝试:

RewriteCond %{THE_REQUEST} \ /+data/subpage/
RewriteRule ^ - [L,R=404]

以便/data/subpage/的任何直接请求都会产生404.如果您希望将R=404替换为{403},则可以将F替换为RewriteCond %{THE_REQUEST} \ /+data/subpage/ RewriteCond %{HTTP_REFERER} !^http://yourdomain.com/subpage/(index\.php)? RewriteRule ^ - [L,R=404]


编辑:

  

这是对的,谢谢。我作为一个观众,无法访问这些文件,但我的页面也无法访问它(例如图像)。有没有办法做到这一点?

这不是您的页面访问这些文件,它是您的页面告诉浏览器访问它们。这意味着你要知道页面告诉浏览器访问它们的唯一方法是检查引用者。不幸的是,引用者可以被轻易伪造,所以这并不能保证人们无法获取所有文件。

{{1}}