【发布时间】:2011-11-12 18:29:12
【问题描述】:
假设我们有以下架构:
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]
我将能够使除 public 以外的其他文件夹无法访问。假设 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]
它工作得很好。为什么新的不起作用?
【问题讨论】: