【问题标题】:.htaccess deny files in subfolders.htaccess 拒绝子文件夹中的文件
【发布时间】:2012-02-06 18:56:17
【问题描述】:

我想阻止对“sub/folder/index.php”的访问,但不阻止对其他任何地方的“index.php”的访问。

<Files index.php>
    Order allow,deny
    Deny from all
</Files>

有效,但会阻止所有“index.php”文件。

<Files sub/folder/index.php>
    Order allow,deny
    Deny from all
</Files>

不起作用。我需要使用&lt;Directory&gt;吗?

我不想在子/文件夹中创建 .htaccess 文件

我无权访问 httpd.conf

我不想阻止子/目录中的所有内容

如果这么简单,我就不会问了;)

【问题讨论】:

    标签: php apache .htaccess


    【解决方案1】:

    我认为最简单的规则是:

    RedirectMatch 403 ^.*/sub/folder/index\.php$
    

    RedirectMatch 在 mod_alias 模块中,你当然有。这并不意味着 mod_rewrite 引擎。这里我们只是告诉 apache 任何对 sub/folder/index.php 的访问都会生成一个“403 禁止”的答案。

    您可以将其放在 httpd.conf 或根 .htaccess 中(但请考虑删除所有 .htaccess,这很糟糕,速度很慢,很遗憾您无法访问真正的配置文件)。

    【讨论】:

    • 这行得通!显然RedirectMatchRewriteRule 分开处理
    • 如果您想禁止访问每个子文件夹中的每个文件,请执行以下操作:RedirectMatch 403 ^.*/*/*\.*$
    • Miha,我认为所有文件的最佳规则最终都是简单的 /*$,这样没有点的文件也将适用于该规则
    • 我现在在我所有的 Wordpress 网站 htaccess 上都使用这个规则。服务器日志显示了许多直接访问主题 index.php 的尝试。 RedirectMatch 403 ^.*/wp-content/themes/(.*)/index\.php$
    【解决方案2】:

    我尝试在该子/文件夹/中创建另一个 .htaccess 来阻止对该 index.php 的访问。

    “如果您将 .htaccess 文件放在子文件夹中,其指令将覆盖您在站点主文件夹中的指令。”

    此页面有更多信息:http://www.besthostratings.com/articles/htaccess.html

    【讨论】:

    • 如果您是第一次听说.htacess 文件的概念,那么您链接的文章很有用。这里用处不大。
    • 您当时的问题不是说明您是否了解了使用 htaccess 的所有可能性,这就是我给您这样一个链接的原因。
    【解决方案3】:

    如何在包含您要保护的文件的特定文件夹中创建一个.htaccess 文件?

    编辑:

    小心,这实际上不适用于简单的.htaccess 文件,请参阅下面的 cmets。这仅适用于 apache.conf 文件。

    如果没有另一个 .htaccess 文件,这应该对你有用:

    <Directory sub/folder>
       <Files index.php>
         Order allow,deny
         Deny from all
       </Files>
    </Directory>
    

    【讨论】:

    • 我当然不想这样做,原因超出了这个问题的范围。
    • 那么是的,您需要应用directoy 规则。我会编辑答案:)
    • 哦,只是偶然发现这仅适用于 apache.conf 文件而不是 .htaccess 文件本身...见httpd.apache.org/docs/1.3/howto/htaccess.html
    • 我已经尝试过了(当然是在发布问题之前),它只是给出了一个永恒的服务器错误。
    • 你有 mod_rewrite 吗?如果是这样,您可能会考虑重写该 URL(如果它与 sub/folder/index.php 匹配)
    【解决方案4】:

    您只能在 部分中使用文件名,而不是路径。

    我可以看到三个选项;

    • 将 .htaccess 文件与文件放在同一文件夹中。
    • 使用 指令和 指令将配置放入 apache.conf。 不适用于 .htaccess 文件,仅适用于 apache.conf
    • 使用 mod_rewrite a'la 创建重写规则;

    -

    RewriteEngine on
    RewriteRule ^sub/folder/index.php$ http://yoursite/index.locked
    

    将在文件上给出 404,如果您想要拒绝权限,请在指向的位置创建一个读保护文件。

    【讨论】:

    • 第二个也是不可行的;)
    • 我已经玩过这个并且它会工作,只有子目录包含一个 .htaccess 文件以及 RewrieRules。所以我需要RewriteOptions inherit 和父级中的RewriteBase decleration,但我无法提供它,因为我的环境是动态的。当你有模块化结构时,我总是觉得 .htaccess 完全没用,这让我很惊讶。
    • 嗯,我只是在子目录中没有 .htaccess 的情况下这样做。子目录是否在您的 apache.conf 或类似文件中有单独的部分,这会使 apache 不信任上层文件?
    • 这显然是默认行为。除非您添加 RewriteOptions inherit,否则不会应用父 .htaccess 文件中的 RewriteRules。但随后该规则不会触发,因为 RewriteBase 设置为子目录。我无法重置RewriteBase,因为我不知道(因为模块化)。一个解决方案是在部署应用程序时生成 .htaccess 文件,但我觉得这更像是一个设计缺陷,毕竟它已经存在了很长一段时间。
    猜你喜欢
    • 2013-11-27
    • 2012-05-06
    • 1970-01-01
    • 2011-05-11
    • 2014-06-03
    • 1970-01-01
    • 2015-01-14
    • 2013-08-27
    • 1970-01-01
    相关资源
    最近更新 更多