【问题标题】:CakePHP: Can you globally modify all links to point to another directory?CakePHP:你能全局修改所有链接以指向另一个目录吗?
【发布时间】:2013-04-01 08:21:40
【问题描述】:

我的 CakePHP 应用程序位于一个子目录中,以防止它崩溃到为网站的一部分提供支持的 Wordpress 安装中:

example.com/ <--root
    /_wp     <--Wordpress installed here
        /page1
        /page2
    /_cake   <--CakePHP installed here
        /page3
        /page4

为了保持一致性,我使用 mod_rewrite 规则将 URL 从 example.com/_cake/pageX 重写为 example.com/pageX 等。这基本上有效,但 CakePHP 仍然使用 /_cake/pageX 创建链接。因此,如果用户将鼠标悬停在某个链接上,“_cake”将显示在浏览器底部,当然还有源代码中。

有没有办法将 CakePHP 配置为认为它实际上位于站点根目录中,以便为链接等创建所需的 URL?

【问题讨论】:

    标签: .htaccess cakephp mod-rewrite cakephp-2.0


    【解决方案1】:

    我还没有找到按照你想要的方式配置 CakePHP 的方法。

    如果您使用HtmlHelper::linkRouter::url 创建链接,则可以将成员$url['base'] = false 添加到$url 数组参数。这可以防止在 URL 前面插入 _cake 前缀。

    作为替代方案,您可以创建自己的 link()url() 函数,它们调用 HtmlHelper::link 并始终添加 base = false

    为此,您还必须在文档根目录中有一个 .htaccess,它将请求重写到它们的真实目的地

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ /_cake/$0 [L]
    

    您还必须注意发往_wp 目录的请求。

    【讨论】:

    • 有趣。所以基本上你是说我不能在全球范围内做我想做的事,但我可以根据具体情况来做。这并不理想,但至少是一种选择。
    • @Emerson 是的,也不是。也许有办法,但我还没有找到。虽然,您不限于使用 CakePHP 函数,您可以创建自己的 link() 并使用它。查看更新的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多