使系统根不能被访问是一种好做法吗?


Is it good practice to make system root unable to be accessed?

假设我们有以下模式:

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/,它指的是根/应用程序/公共/。我说的对吗?

但是我在那里设置的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]

,它工作得很好。为什么新的那个坏了?

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

这样,web用户就只能访问这个文件夹了。

编辑:更多信息请查看apache手册http://httpd.apache.org/docs/2.0/mod/core.html#documentroot

我的初始代码是正确的。除了第三行,它忽略了/一个文件夹,让我看到它,而不是重定向到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]