0

我正在尝试将 XenForo 添加到我的 Phalcon 应用程序中。该项目的结构如下:

www/
    phalcon/
        app/
            controllers/
                AccountController.php
            views/
                account
                    login.phtml
        public/
            forums/    <-- XenForo installation
            .htaccess
            index.php
        .htaccess

文件www/phalcon/.htaccess如下所示:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule  ^$ public/    [L]
    RewriteRule  (.*) public/$1 [L]
</IfModule>

文件www/phalcon/public/.htaccess如下所示:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>

我添加了一个视图,www/phalcon/app/views/account/login其中包含一个发布到 XenForo 登录脚本的表单,该脚本位于http://localhost/phalcon/forums/login

<?php echo $this->tag->form('forums/login'); ?>

    <p>
        <label for="name-email">Name or email:</label>
        <?php echo $this->tag->textField('login'); ?>
    </p>

    <p>
        <label for="password">Password</label>
        <?php echo $this->tag->passwordField('password'); ?>
    </p>

    <p>
        <?php echo $this->tag->submitButton('Login'); ?>
    </p>

<?php echo $this->tag->endForm(); ?>

发布表单引发错误,因为我没有 ForumsController:

PhalconException: ForumsController handler class cannot be loaded

所以我将文件修改为www/phalcon/public/.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteRule ^(forums)($|/) - [L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>

这会导致 Phalcon 忽略任何以 . 开头的路由forums。但是,现在我在发布表单时收到 404:

The requested URL /phalcon/public/forums/login was not found on this server.

我认为 XenForo 会在这一点上接管路由,但显然不是。我需要做些什么才能让 Phalcon 和 XenForo 发挥出色?

4

1 回答 1

1

但是 XenForo 不是一个完全独立的应用程序吗?我明白你想要什么,但深吸一口气,想想你是否真的需要它。恕我直言,你让自己复杂化了。如果 XenForo 使用一些指向不存在文件的魔术 URL 怎么办?!

我无法指出所有可能的并发症,但肯定会有一些并发症,您可以通过简单地将 XenForo 安装放置在 Phalcon 用于自己资产的文件夹之外的任何位置来避免这种情况。每个项目都有他们的约定,我只是对此有不好的感觉:)

这是我的建议:您可以将 XenForo 保留在“phalcon”文件夹中,但将其移到“公共”文件夹之外,并在 main 中为该文件夹添加一些重写.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteRule  ^$ public/    [L]

    RewriteCond %{REQUEST_URI} !^/forums(\/.*$|$)
    RewriteRule  (.*) public/$1 [L]
</IfModule>

基本上和你以前做的一样,但是在一个更“安全”的地方。

于 2014-04-18T16:45:49.027 回答