【问题标题】:.htaccess Deny everything but index and server side.htaccess 拒绝除索引和服务器端以外的所有内容
【发布时间】:2017-06-21 23:15:57
【问题描述】:

我搜索了几乎所有想到的关键词,我知道有类似的问题,但这不是重复的,因为它们对我不起作用(不是我需要的确切设置或只是不起作用)。

我在我的 Windows 10 PC(Apache 和 mysql)上运行 XAMPP,尚未在文件中进行太多配置,但对正在发生的事情有一个大致的了解。

我想要的是位于 htdocs 文件夹(可查看的根目录)中 .htaccess 文件中的 allow/deny 块,或者更好的是,域重写块:

  • 拒绝对位于可见根目录中的文件的所有直接访问尝试

豁免:

  • 所有名为 index.php 的文件都位于它们可能位于的任何(子)文件夹中
  • 或者如果访问尝试来自服务器本身(大多数其他解决方案的问题是.css|.js|.png 和我的.php 文件需要的其他文件将被阻止,甚至包含其他*.php 文件将被阻止)

我尝试了很多解决方案,但都在我上面列出的几点上失败了! 如果有任何工作的人,我感谢您的帮助,如果没有,请告诉我。

-RmOL

【问题讨论】:

  • CSS、Javascript 和图像文件是从客户端而不是从服务器请求的。
  • 所以根据定义,它们不能被保护以防止直接访问? + 如果我要通过 include 加载 CSS 和 JS ..(我知道它们是可见的)但它会阻止直接访问吗?
  • 如果您愿意,您可以保护任何文件,但客户端无法加载它。如果您按字面意思包含它,那当然可以。
  • 应该忘记保护 CSS 和 JS 文件的概念。您或任何拥有网站的人都无法阻止看到代码。客户端/浏览器必须阅读它才能显示页面。客户端代码对所有人开放,只需接受即可。即使您甚至不需要直接查看文件,浏览器也可以使用几乎每个浏览器中内置的浏览器开发工具向您显示代码。
  • 现在拒绝除 index.php 之外的所有其他文件一点也不难。您可以这样做,以便服务器可以访问文件。

标签: php apache .htaccess mod-rewrite


【解决方案1】:

任何 MVC 框架 .htaccess 文件都可以解决这个问题。在您的网络根目录中尝试此操作

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

不要忘记启用 mod_rewrite 并重新启动 apache :) 如果您要寻找其他东西,请尝试

defined('BASEPATH') OR exit('No direct script access allowed');

在您要保护的每个文件的开头。第二种解决方案取自 CodeIgniter

【讨论】:

  • 网络根目录是指我存储所有 php 页面的文件夹还是 apache 定义的根目录?
  • 它可以防止 404 错误,但仍然可以访问名为 index 或其他任何内容的现有 php 文件。
  • 你需要禁止htaccess中的每个php文件-> stackoverflow.com/questions/11728976/…
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 2020-02-19
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
相关资源
最近更新 更多