使系统root无法访问是一种好习惯吗?

时间:2011-11-12 18:29:12

标签: php apache .htaccess

假设我们有以下架构:

root/
    application/
        -public/
            index.php
            css/
            img/
            javascript/
        ...
    system/
        ...

我在想,如果我使用以下规则在根目录中创建.htaccess文件:

RewriteEngine On
RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ application/public/index.php?url=$1 [QSA,L]

我可以创建除公共以外的其他文件夹无法访问。假设index.php是加载应用程序所需的所有文件并包含并要求它们的文件(不经意地使用相对路径):应用程序实际上是在index.php中运行的,并且每个公共文件(如css样式表,图像或javascript脚本)都是在公用文件夹中。因此,作为用户,您无法访问系统文件夹,因为如果您在www.site.com/上编号,则它指的是root / application / public /。我是对的吗?

但我设置的htaccess规则不起作用...如果我把htaccess放在根文件夹中并尝试访问根文件夹,浏览器会显示根文件夹的文件列表(应用程序和系统) )。为什么不起作用?

我在前一段时间使用过这个,当index.php在根文件夹中时:

RewriteEngine On
RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

它运作得很好。为什么新的工作不起作用?

2 个答案:

答案 0 :(得分:4)

项目的文档根目录应设置为/public文件夹。

这种方式是网络用户唯一可以访问的文件夹。

编辑:有关详细信息,请查看apache手册http://httpd.apache.org/docs/2.0/mod/core.html#documentroot

答案 1 :(得分:0)

我的初始代码是对的。除了第三行不经意地考虑/文件夹并让我看到它而不是重定向到application / public /。 评论第三行一切正常。

RewriteEngine On
RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L]
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ application/public/index.php?url=$1 [QSA,L]