假设我们有以下架构:
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]
它运作得很好。为什么新的工作不起作用?
答案 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]