Apache - “动态”重写规则

时间:2010-06-09 08:42:10

标签: apache zend-framework mod-rewrite routing

我正在开发一个Zend Framework项目,我遇到了一些问题。 问题源于模块是Zend Framework中的二等公民。在我的项目中,我希望每个模块都有一个文件夹,其中包含可以从外部访问的文件 - 例如样式表,javascripts和图像。

现在,这是怎么做的。使用Zend Framework项目,我有一个文件夹结构,如下所示:

  • 应用/
    • 模块/
      • ModuleONE中/
        • 公共/
          • stylesheet.css中
      • ModuleTWO中/
      • 模块ModuleTHREE /
  • 公共/
    • 的index.php

位于 public / 文件夹中的标准.htaccess文件包含:

SetEnv APPLICATION_ENV development
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

它的工作方式是项目的apache DocumentRoot是 public / 文件夹。所有请求都通过Zend Framework的路由器组件接管的 index.php 文件重定向。现在,我绝不是Apache和mod_rewrite的专家,所以请原谅我,如果这只是愚蠢的话。我想我在现有的重写规则中实现了一个额外的步骤,这样如果我请求 http://project/public/moduleOne/stylesheet.css ,它将解析为 / var / www / project / application / modules / ModuleONE中/公共/ stylesheet.css中

所以需要做的步骤是检查URI中的第一个元素是否为 public / ,如果是,我们将下一个段作为模块名称并在路径中使用它我们正试图解决并尝试提供该文件。

这是完全可能还是有人有更好的建议?

感谢您的时间 Christian Rasmussen

1 个答案:

答案 0 :(得分:0)

只使用mod_rewrite,您无法请求文档根目录之外的文件。因此,唯一的解决方案是使用位于文档根目录中的符号链接并指向模块目录。