假设我们有以下模式:
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]