在CakePHP中为Wordpress重写Lighttpd

时间:2011-11-28 11:23:36

标签: wordpress cakephp rewrite lighttpd

我在为CakePHP应用程序内的Wordpress安装设置Lighttpd重写规则时遇到问题。

文件夹结构如下所示:

var/
    www/
        app/
            webroot/
                blog/
        cake/
        vendors/

cakePHP应用程序运行正常。如果我尝试访问http://domain.tld,则会加载应用首页。任何访问控制器/操作的尝试也可以正常工作。当我尝试加载任何wordpress帖子时会出现问题。访问WP帖子的网址结构如下:http://domain.tld/blog/post/post-slug

我现在/etc/lighttpd/lighttpd.conf上的内容是

$HTTP["host"] == "domain.tld" {
    server.document-root        = "/var/www/app/webroot/"
    url.rewrite-once = (
        "/(css|files|img|js|php)/(.*)" => "/$1/$2",
        "^([^\?]*)(\?(.+))?$" => "/index.php?url=$1&$3",
    )
}

$HTTP["url"] == "domain.tld/blog/" {
    server.document-root        = "/var/www/app/webroot/blog/"
    url.rewrite-final = (
        "^/(wp-admin|wp-includes|wp-content|gallery2)/(.*)" => "$0",
        "^/(.*.php)" => "$0",
        "^/(.*)$" => "/index.php/$1"
    )
}

当我尝试打开博客帖子时,它会打开一个似乎是破蛋糕行为的页面。它加载了蛋糕默认视图(页眉和页脚),但主要部分没有任何内容。这意味着它正在调用控制器/动作。如果我打开调试Configure::write('debug', 2)以查看发生了什么,我会收到以下错误:

  

致命错误:第107行的/var/www/cake/libs/i18n.php中找不到“调试器”类

在应用程序的任何其他部分,调试器工作正常。

访问WP帖子只有两种方法。使用默认的WP永久链接设置(domain.tld/blog/?p=123)或设置server.document-root="/var/www/app/webroot/blog/",但在这种情况下,cakePHP应用程序将无法使用。

注意:如果我使用Apache,一切正常。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。

重写问题

首先,重写。就这么简单:

$HTTP["host"] =~ "domain.tld" {

    server.document-root = "/var/www/app/webroot/"
    url.rewrite-once = (
        "/(css|files|img|js|php)/(.*)" => "/$1/$2",
        "^/blog/(.*)$" => "/blog/index.php/$1",         // to take care of WP
        "^([^\?]*)(\?(.+))?$" => "/index.php?url=$1&$3" // to take care of cakePHP
    )
}


Class'Debugger'问题

现在, Class'Debugger'未找到问题。

  1. chmod 777 / var / www / app / tmp /
  2. 从同一文件夹中删除所有临时文件
  3. 这是我已经完成的基本工作。但问题仍然存在。所以这就是诀窍。继续执行上述两个步骤,并将调试设置为零(0)。在/app/config/core.php

    Configure::write('debug', 0)
    

    加载任何页面或操作。然后,将调试更改为1.再次加载页面。最后,将调试更改为2.加载页面,您将不再看到该错误。

    听起来很疯狂,但它在这里起作用。如果我在第一次加载页面时将调试设置为2,则会引发错误。

    如果这不起作用,您可能想尝试许多网站上提到的解决方案。在导致错误的行之前添加App::import('Core', 'Debugger')。它在这里不起作用,但许多人说它有效。