【发布时间】:2014-04-07 01:26:04
【问题描述】:
我的项目目录结构:
project_root/
|- src/
| |- model/
| |- view/
| |- controller/
| -- ...others
-- resources/
|- css/
|- js/
-- images/
好的,在src的某处有一个文件负责重定向控制器、视图等,假设它是src/url_mapping.php,它准备解决任何类型的url,例如/{controller}/{action}/{id}?{query},这里没有问题,重要的是我不想让用户意识到这个文件夹结构的存在,我想对他们隐藏它,让流程像 RoR 和其他基于系统的系统一样简单。
我希望只允许来自resources 的http://host/{css,js,images}/* 而不允许http://host/resources/* 本身,以及http://host/{controller}/{action}/{id}?{query} 对src/url_mapping.php 文件的拒绝直接访问http://host/src。
目前,我管理的最接近的是以下.htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{DOCUMENT_ROOT}/resources/$1 !-f
RewriteCond %{DOCUMENT_ROOT}/resources/$1 !-d
RewriteCond %{DOCUMENT_ROOT}/resources/$1 !-l
RewriteRule (?!^resources/|^src/url_mapping.php/)^(.*)$ src/url_mapping.php/$1 [L,PT]
RewriteCond %{DOCUMENT_ROOT}/resources/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/resources/$1 -d [OR]
RewriteCond %{DOCUMENT_ROOT}/resources/$1 -l
RewriteRule (?!^resources/)^(.*)$ /resources/$1 [L,PT]
</IfModule>
在这种情况下,我的第一个意图是:如果用户尝试获取 /resources 或 /src 文件夹,它也会被 src/url_mapping.php 过滤,尽管我尝试了几种组合,但一次又一次没有成功。
我注意到mod_rewrite 处于循环状态,因此我无法阻止resources 目录以及src/url_mapping.php,我被束缚在.htaccess 文件中,但如果有其他方法可以做我会接受解决方案。
最后的选择是只做一次重定向,并通过src/url_mapping.php 处理resources 中的偶数文件,但它会杀死缓存,我避免重新发明轮子。
【问题讨论】:
-
这是我负担的原因:stackoverflow.com/a/13446636/3122886
标签: php apache .htaccess mod-rewrite