0

在我使用 PHP 的旧网站上,我有一个.htaccessin 目录/noaccess,如下所示:

# /noaccess/.htaccess
<FilesMatch "^.*$">
order allow,deny
deny from all
</FilesMatch> 

我有一个 PHP 文件,比如,

<html>
<body>
<?php include('noaccess/blah.ssi'); ?>
</body>
</html>

这工作正常,内容blah.ssi可见。

但是,在我当前的站点上,我使用的是 SSI 和以下内容:

<html>
<body>
<!--#include virtual="noaccess/blah.ssi" -->
</body>
</html>

不起作用。日志显示unable to include "noaccess/blah.ssi"。删除该FilesMatch指令并且它可以工作。所以我显然误解了该命令的工作原理,我没有意识到它会阻止 Apache 本身。那么如何阻止来自网络的访问但允许 SSI 访问?(我认为我可以(并且应该)存储我不想在外部访问的东西,public_html但这似乎在 SSI 包括中也不起作用 - 但无论如何,即使它确实如此,我很想知道如何做这个)。

谢谢,T。

4

2 回答 2

0

据我所知, mod_include 遵循客户端的限制,所以你不能用 apache 指令做你想做的事。

但是,如果要隐藏包含的文件,可以使用文件Options -Indexes上的指令禁用目录索引.htaccess。此外,您可以以难以猜测的方式命名包含的文件。

我的首选选项是使用 uuid,您可以使用在线工具生成它们或在您的工作站上安装一些实用程序:

itorres@localhost$ uuid
6e8feb48-1a3b-11e0-a0e3-00505624a126
itorres@localhost$ vi noaccess/6e8feb48-1a3b-11e0-a0e3-00505624a126.ssi
于 2011-01-07T08:57:25.960 回答
0

如果您只是不想让人们在地址栏中输入文件时看到您的文件,那么您可以将它们放在没有索引 ( -Indexes) 和未发布名称的目录中,并且如果您从不透露文件的名称( SSI 不这样做),那么您只需要担心有人猜对了。您始终可以通过根据推荐人或类似方式禁止访问来阻止访问。

于 2014-11-07T21:10:21.290 回答