【问题标题】:Zend Framework site with Drupal (or any other CMS) in subfolder)Zend Framework 站点在子文件夹中带有 Drupal(或任何其他 CMS))
【发布时间】:2010-11-24 21:16:43
【问题描述】:

我正在构建基于 Zend 框架的网站/应用程序。对于大量页面,我想使用 Drupal。 Drupal 大概安装在 /cms 文件夹中。

Zend Framework 入口点是

/public/index.php

对于 Drupal 来说是

/public/cms/index.php

如何使用一些 .htaccess mod_rewrite 规则来删除 Drupal 的 URL 的“/cms/”部分,也就是说,我希望链接到页面

www.example.com/blog/a-blog-post

而不是

www.example.com/cms/blog/a-blog-post

另外,我希望 Zend 框架中的自定义路由正常工作。

子问题:谁将提供 404 未找到页面、Zend Framework 应用程序或 Drupal?

【问题讨论】:

    标签: php zend-framework drupal .htaccess mod-rewrite


    【解决方案1】:

    不确定 Drupal 如何处理它的根主机名,但使用 Zend Framework 中的默认 mod_rewrite 规则,公共路径中作为文件夹存在的任何内容都将覆盖 ZF 路由。

    所以我猜如果你在public/blog 中安装 Drupal,你可以找到www.example.com/blog/a-post-name 并且它会命中 Drupal。至少我在将 Wordpress 与 ZF 结合使用时就是这样做的。

    将根据遇到错误时正在运行的应用程序呈现错误页面。

    【讨论】:

      【解决方案2】:

      只要你的 drupal url 都是“/blog”,一个单一的重写规则就足够了,只要在 zend 框架重写规则之前解释它就足够了。

      我只是把它从头顶拉出来,所以我希望它有效:

      RewriteEngine On
      RewriteBase /blog
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /cms/index.php [L]
      
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]
      

      重要的 [L] 告诉 apache 这是最后一条规则,不应再进一步。这应该工作,但它可能需要一些按摩。;)

      为了回答您的子问题,双方都会抛出 404。在 /blog 中没有找到的任何东西都是 drupal,没有找到的任何东西都是 ZF。

      【讨论】:

      • 好的,当只有一个使用 Drupal 的路径时,这是一个很好的解决方案。如果有几个 Drupal 托管路径/类别,例如 /blog/a-blog-post、/faq/some-faqs、/tutorials/a-tutorial 等,那会怎样... Drupal 中的类别数量可能是无限的,但是Zend Framework 路由和控制器的数量将被限制在少数。
      • 如果你赋予drupal 无限的能力并将ZF 设置为有限,你最好先为ZF 编写重写规则,然后让其他一切都交给drupal。只需按优先顺序设置重写规则即可。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多