【问题标题】:htaccess securing files from being accessed by usershtaccess 保护文件不被用户访问
【发布时间】:2016-03-07 04:57:04
【问题描述】:

所以,我相信这个问题在这里被问了很多,但是经过 20 分钟的搜索,我找不到任何能产生正确结果的问题。

我有文件,例如/index.php/dashboard.php,它们使用/framework/assets/stylesheets/index.css 等资源文件。我想做的是阻止对/framework/ 目录中任何文件的访问,但仍然允许从index.php 和其他相应文件中使用它们。我将如何配置我的 .htaccess 文件以允许我这样做?

我知道这可能是不可能的,但是有什么办法可以让目录/framework/ 包含一些对用户隐藏的PHP 文件,但仍然允许使用include 'file.php' 通过其他PHP 脚本访问?

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 从服务器的角度来看,包括 HTML 中的文件(
    您可以做的是在您的 main.htaccess 中阻止对 /framework/ 的访问(这些文件仍然可以通过 include/require 获得),然后在您的 /framework/assets/ 中添加第二个 .htaccess允许访问的文件夹
  • 我期待这是对资源文件的响应。有没有办法排除对 PHP 文件的访问,但允许 include 函数工作?
  • include/require 函数不受您的 .htaccess 影响。.htaccess 是一个 apache-only 文件,只响应 http-request。

标签: php css .htaccess


【解决方案1】:

由于您希望只有在特定 php 脚本运行时才可以使用 css 文件,您可以在 php 中使用 include 指令并将其嵌入到您的其他 html 中。

类似这样的:

//...
<head>
    <style>
    <?php
        include("/framework/assets/stylesheets/index.css");
    ?>
    </style>
//...
</head>
//...

php 文件不受 htaccess 限制,您可以将其包含在服务器端并仅向客户端提供您想要的东西。

【讨论】:

  • 您能否为此提供一个示例或进一步解释?以及有关您提到的方法的文档?
  • 我了解您来自哪里,但对于一般网站标记,使用 HTML &lt;link rel='' type='' href=''/&gt; 是更好的做法。
  • 您希望css仅在访问php文件时可用。由于这是从浏览器端调用它,因此无法阻止直接访问。
  • 他,是我,是限制地址栏访问CSS的。如果不是这样,请原谅。
  • 是的,您希望从地址栏中禁止它。由于这是客户端,因此您无法阻止它,除非您将 css 嵌入到您的网络服务器响应中。
【解决方案2】:

您不应阻止对 CSS 和 JavaScript 文件的访问。如果你这样做了,这意味着你的网站的设计将会崩溃。对于包含文件,请尝试以下规则。将具有以下规则的 .htaccess 文件放在要禁止访问的包含目录中。这些规则仅允许对目录中包含的文件提出$_POST 请求,并且您可以将一个文件包含到另一个文件中,从而限制对该包含文件的直接访问。

<LimitExcept POST>
order deny,allow
deny from all
</LimitExcept>

【讨论】:

  • 非常感谢的回答。在 Magnus Eriksson 的帮助下,我整理了我的问题,但我相信这对于未来类似的问题会派上用场。谢谢。
  • 很高兴知道你把它整理出来了 :)
【解决方案3】:

正如 Magnus Eriksson 对原始问题的 cmets 所述,要使用 CSS 文件、JS 文件和其他资源文件实现我想要的效果是无法完成的,因为这些文件是由HTML,因此使用 http 请求。

但是,可以通过将 .htaccess 文件放在 /framework/ 目录中的内容来保护 PHP 文件:

deny from all

要授予对/framework/assets/ 中资源的访问权限,只需添加另一个.htaccess 文件,其中写入allow from all

简单问题的简单答案。

供进一步使用的文档: https://httpd.apache.org/docs/2.2/howto/access.html

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签