【问题标题】:Use .htaccess to prevent root directory from public access使用 .htaccess 防止根目录被公共访问
【发布时间】:2013-04-17 15:50:10
【问题描述】:

我不知道这样的事情是否可行,但让我们试一试。在过去(三年多前),我在一个 MVC 教程中了解了这样的解决方案(不知道具体是怎样的)。

目录结构

  • WebRoot/
    • 包括/
    • 配置/
    • 公开/
      • 图片/
      • js/
      • css/
      • index.php
    • init.php

我想做的是

当用户访问http://www.mysite.com/a/b/c/时,将所有请求重定向到/public/index.php页面。即,所有对网站的请求都将通过/public/index.php页面,除了images/js/css/目录,它们在public/中。

另外,http://www.mysite.com/includes/ 将重定向到index.php 页面,并将includes/ 获取为$query

Index.php 页面

<?php

// get init file from webroot directory, which will load all required php files.
define ('ROOT', dirname(dirname(__FILE__)));
require_once (ROOT . 'init.php');


// get query from url (here, $query = "a/b/c/")
if(isset($_GET['q'])) {
    $query = $_GET['q'];
}

// insert images, css etc. resource
echo "<img src='http://www.mysite.com/images/foo.jpg' />";
echo "<script src='http://www.mysite.com/js/bar.js'></script>";

?>

这对于使用 web 托管的人来说很有用,它不提供对 webroot 的一步目录访问。

编辑

好的,我找到了获得这个概念的网站。请参阅根目录和公共目录中使用的两个 .htaccess 文件。 Link to MVC tutorial

【问题讨论】:

  • @faa 是的/config 以及public/ 之外的所有其他内容。

标签: php .htaccess


【解决方案1】:

我假设 .htaccess 位于 WebRoot

要重写所有请求,您只需使用RewriteRule。当要排除某些路径时,使用一个或多个RewriteCond

RewriteEngine on
RewriteCond %{REQUEST_URI} !/images/
RewriteCond %{REQUEST_URI} !/css/
RewriteCond %{REQUEST_URI} !/js/
RewriteCond %{REQUEST_URI} !/public/index\.php
RewriteRule .* public/index.php?q=$0 [L,QSA]

RewriteRule ^images/.+ public/$0 [L]
RewriteRule ^js/.+ public/$0 [L]
RewriteRule ^css/.+ public/$0 [L]

标志QSA 将任何其他现有查询字符串作为参数附加到index.php。如果您不想附加任何现有的查询字符串,只需将QSA 标记留在外面即可。

如果您希望客户端可以看到重写,则必须将R 标志添加到RewriteRule,即[R,L,QSA][R,L]

【讨论】:

  • 嘿,你得到了加号。除了图像、css 和 js 外,一切正常。要访问它们,简单的方法是使用http://www.mysite.com/public/images/foo.jpg,而不是http://www.mysite.com/images/foo.jpg。谢谢。
  • @user1995997 抱歉,我错过了。我为这些目录添加了规则。
  • 还有一个错误,在最后四行中,.+ /public/ 应该是 .+ public/
  • @user1995997 好的,已解决。所以,WebRoot 不是你的DocumentRoot
  • 有,也没有。在虚拟主机服务器上,WebRoot 是 DocumentRoot,而在 localhost 上不是。哈哈!!
【解决方案2】:

您可以使用其他技巧,您的页面不会重定向到另一个页面,但您会限制其他用户查看目录索引

Options -Indexes

将此文本添加到您的.htaccess 文件中,它将生成403 错误(禁止)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多