服务器上的特定文件是否可以对一组特定的脚本可见,但在通过URL访问时返回404错误?


Can a particular file on a server be made visible to a specific set of scripts, but return a 404 error when accessed by URL?

我在某些脚本中包含了文件(include())。但是,如果有人要通过浏览器输入文件的路径作为URL,我希望服务器提供404错误。我该怎么做呢?

# map 403 to 404 error page, prob. not a good idea...
ErrorDocument 403 /error/404.html
<Files *.php>
  Order Deny,Allow
  Deny from all
</Files>
<Files index.php>     # <- allow direct access to index.php only
  Order Allow,Deny
  Allow from all
</Files>

也许更好的方法是在index.php文件中定义一个常量,并检查该常量是否在其他脚本中定义。如果没有,则返回404状态并显示404模板。

将文件放在文档根目录之外的某个地方。从web访问将无法找到它,但脚本仍然可以使用本地系统中的绝对文件路径。

/-- home -- docroot -- index.php 
     |
     +- scripts -- myscript.php

http://www.example.com/home/docroot得到index.php

index.php包含/home/scripts/myscript.php

有很多方法可以做到这一点。我的第一个建议是将所有你不打算通过web服务器实际提供的文件移出web服务器根目录。

如果你不能或不愿意这样做,你当然可以使用Apache .conf文件或。htaccess来限制对某些目录或文件的访问。

如果你没有访问服务器配置,你可以在每个包含文件的顶部添加一些简单的代码,如果文件没有以适当的方式访问,则返回404头(通常通过在包含文件的页面上设置一些标志并在包含文件中测试该标志来完成)。