概述
到目前为止,我一直在创建这个非常好的.htaccess文件,其中包含一些非常好的设置。我想知道现在是否有可能只允许通过平面链接访问文件,同时拒绝直接访问相同的文件。
说明和当前设置
要更好地提出此问题,请考虑以下内容:
我有一个文件:即myFile.php
位于子文件夹中:即my/path/to/file/
文件的完整路径将为my/path/to/file/myFile.php
通过URL访问此文件时,会写道:my.domain.com/my/path/to/file/myFile.php
在我的.htaccess文件中,我写了一个重写规则,类似于下面的代码行(前面有一些RewriteCond
,确保分别满足主机和文件名的条件):
RewriteRule ^home$ /my/path/to/file/myFile.php [NC,L]
这意味着试图访问我的页面my/path/to/file/myFile.php
的人可以简单地编写my.domain.com/home
,而不是丑陋的路径my.domain.com/my/path/to/file/myFile.php
。
问题和首选结果
我要问的是:
如果有人或机器试图访问my.domain.com/my/path/to/file/myFile.php
,同时允许通过my.domain.com/home
访问文件,是否可以阻止对myFile.php
的访问?
如果有人或机器试图访问
my.domain.com/my/path/to/file/myFile.php
,同时允许通过my.domain.com/home
访问文件,是否可以阻止对myFile.php的访问
是的,使用THE_REQUEST
变量是可能的,它表示Apache从浏览器收到的原始请求,并且在执行一些重写规则后不会被覆盖。
您可以使用此规则来阻止对特定文件的直接访问:
RewriteCond %{THE_REQUEST} /my/path/to/file/myFile.php[?/s] [NC]
RewriteRule ^ - [F]