【问题标题】:Custom PHP MVC Framework: How to ensure locational compatibility with .htaccess?自定义 PHP MVC 框架:如何确保与 .htaccess 的位置兼容性?
【发布时间】:2011-10-19 05:21:41
【问题描述】:

我正在开发一个基于 PHP MVC 框架的 CMS 系统。

我的 WAMP 服务器上有以下目录结构:

c:/<webroot>/application/ (contains all Ms Vs and Cs)
c:/<webroot>/config/ (contains application.ini)
c:/<webroot>/public/ (contains /img, /js, & /css)
c:/<webroot>/index.php (entry point of MVC)
c:/<webroot>/.htaccess

.htaccess 包含:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

系统中的其他任何地方都没有 .htaccess 文件。

.htaccess 规则旨在实现以 Zend 框架样式 http://HTTP_HOST/controller/action/key/value/.../key/value/ 样式 URL 重写 URL

据我所知,当 MVC 位于 Web 主机的根目录时,它运行良好。

然而,只要我深入一个文件夹,一切都会崩溃: 例如,我希望从根目录托管 MVC 网站,并将其基于 MVC 的 CMS 托管在深层 (/admin/) 上。拥有上面的 .htaccess 文件似乎会将所有对 CMS 的请求都退回到根站点...每个文件夹是否需要不同的 .htaccess 规则?是否可以编写规则来忽略根 .htaccess 文件对 CMS 的请求?

谢谢!

【问题讨论】:

  • 您有 2 个选项:1) 在 /admin/ 文件夹中创建另一个具有所需规则的 .htaccess -- 它仅适用于以 /admin/ 开头的 URL; 2) 将所有重写规则放入根文件夹的 .htaccess 中,但 CMS (/admin/) 的规则放在 MVC 规则之前。
  • #1 - 您应该完整回答这个问题,而不是评论。 #2 - 您能否提供两个文件夹的 .htaccess 文件内容示例?我相信我试过这个,但不管两者都有,ROOT 文件夹中的重写规则取代了子文件夹中的规则。

标签: php .htaccess mod-rewrite url-rewriting


【解决方案1】:

.htaccess 规则是根据目录层次结构强制执行的。如果子目录中没有 .htaccess 规则,则它将遵守父目录中定义的规则(或更高版本,直到找到 .htaccess 文件)。如果 .htaccess 文件位于子目录中,则强制执行的规则是已定义的规则以及已定义的任何替代规则的累积。

在您的情况下,您可以在根 .htaccess 中编写规则来处理管理子目录。但是,在 admin 子目录中定义一个新的 .htaccess 文件可能更容易、更清晰。

【讨论】:

  • 如果我采用更简单/更清晰的方法,我需要在两个文件夹中的 .htaccess 文件中放入什么,以便根目录中的文件不会“拦截”针对子文件夹的请求?
猜你喜欢
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多