【发布时间】:2013-08-29 09:38:20
【问题描述】:
或者更好地说,将所有内容重写为app.php,除了/public/ 路径。我已经在四处寻找,但找不到真正可行的解决方案。基本上我想要的是每个 url 都将被路由到 app.php/route,即使该文件夹存在 - 除非有例外。目前我只是为 foo 和 bar 获取 403,但是它们应该被路由到 app.php/foo 和 app.php/bar。另一方面,/public/ 不应该被重写。
还有一些很酷但不是那么重要的事情,那就是 URL /app.php/ 将被重写为 app.php/app.php。
我需要在我的 htaccess 中做什么才能实现这种重写方式?
目录结构:
-| projects
-| SomeSite
-| foo
- .htaccess [deny from all]
-| bar
- .htaccess [deny from all]
-| public
-| css
-| js
-| img
- app.php
- .htaccess [mod_rewrite is here]
我目前正在重写htaccess:
DirectoryIndex app.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !(/public|app\.php)$
RewriteRule ^(.*)$ app.php/$1 [QSA,L,NC]
【问题讨论】:
-
其他2个htaccess文件有重写规则吗? (在 foo 和 bar 中)
-
在 REQUEST_FILENAME 上引用文档:“匹配请求的文件或脚本的完整本地文件系统路径,如果服务器已经确定的话” – 我认为这可能这里的问题是,服务器已经将目录 foo 查找为存在,但在那里找到了你的“全部拒绝”htaccess - 因此用 403 回答。你能取出拒绝来自请暂时验证一下?
-
@JonLin 不,只是一个
deny from all。 -
@CBroe 然后它确实重定向到 index.php。从所有人中删除拒绝是否安全?
-
Depends :-) 如果这个目录中的文件暴露在网络上会发生什么?里面有什么敏感的东西吗?只要你的重写到位,任何东西都会被重写到你的 app.php 中,所以没有机会直接访问那里的文件。但是现在让别人不小心用重写规则覆盖了你的 htaccess……
标签: apache .htaccess mod-rewrite