【问题标题】:Phalcon and XenForoPhalcon 和 XenForo
【发布时间】:2014-04-17 23:33:04
【问题描述】:

我正在尝试将 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 发挥出色?

【问题讨论】:

  • 为什么论坛不能移动到“www”文件夹?
  • 你为什么不这样做?只是想了解你在做什么人......
  • 嗯,/var/www 除了/phalcon 之外还有几个项目。该应用程序有许多部分,包括论坛。所以/forums 位于/phalcon 下。将 /forums 移动到 /var/www 会使其成为一个完全独立的应用程序,不是吗?
  • @cvsguimaraes 顺便说一句,我并没有故意粗鲁,我只是不明白移动论坛目录将如何帮助解决我的问题。我希望访问论坛的 URL 为 http://localhost/phalcon/forums。如果论坛目录不在/var/www/phalcon/public/forums 下,我可以做到这一点吗?我的项目结构错了吗?
  • 我们很酷 :) 我正在写一个答案,考虑到你所说的,等等。

标签: php .htaccess mod-rewrite phalcon xenforo


【解决方案1】:

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

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

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

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteRule  ^$ public/    [L]

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

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

【讨论】:

  • 如果您希望尾部斜杠可选以能够访问/forums,请将!^/forums/.*$ 更改为!^/forums(\/||).*$
  • 它仍然抛出错误,因为它找不到 ForumsController。 This works - RewriteRule ^forums($|/) - [L] - 除了没有斜杠我无法让它工作。我试过^forums.*$^forums(\/||).*$,没有骰子。
  • @Koveras 试试这最后一个
  • 自 4 月以来我没有接触过这个项目,但它现在运行良好。其实我用的是RewriteCond %{REQUEST_URI} !^/forums.*,比较容易理解。
猜你喜欢
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2016-10-12
  • 2013-10-04
  • 1970-01-01
相关资源
最近更新 更多