【问题标题】:CodeIgniter - multiple entry paths with other CMS on same siteCodeIgniter - 与同一站点上的其他 CMS 的多个入口路径
【发布时间】:2012-11-03 00:16:15
【问题描述】:

这是一个对每个人来说都很奇怪的问题。我有一种情况,现有网站上运行 wordpress 作为网站的主要 CMS,由于 URL 结构等原因,有一些额外的代码无法在 WP 中实现,所以我们想将 CI 放在同一主机。

但是,该站点上的 CI 需要两个潜在的入口点 - 我们将它们称为 /userside 和 /adminside

我希望两者共享相同的应用程序和系统文件夹,它们都在同一个可访问的文件夹空间中。

我已经很容易让 /userside 与 WP 共存。

这是 .htaccess 文件

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^/userside [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /userside/index.php [L]

RewriteRule ^/adminside [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /adminside/index.php [L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

我的文件夹布局如下

FTP ROOT/
    ci/ <- codeigniter root
      application/
      system/
    http/
      index.php <- WP index.php
      adminside/
        index.php <- CI index.php
      userside/
        index.php <- CI index.php
      ... wp-content etc

我已将用户端的文件复制到管理端并尝试了符号链接,但都不起作用。

在 CI 的应用程序/配置中,我将 base_url 修改为:

list($_trash, $_base, $rest) = explode('/', $_SERVER['REQUEST_URI'], 3);
$config['base_url']     = "http://".$_SERVER['HTTP_HOST']."/".$_base;

这意味着它会自动将 URI 的第一段作为应用程序基础,我已经调试了这段代码并且它设置正确。

现在问题来了,当我访问 /userside/somecontroller 时,它可以工作,但是,当我访问 /adminside/somecontroller 时,它就不行了。我得到一个 404 页面。

我可以通过访问 /adminside 来访问默认控制器的 index() 函数 - 这有效,但在我指定控制器和方法时无效。

例如:

http://www.mysite.com/userside/mycontroller/mymethod http://www.mysite.com/userside/mycontroller/mymethod

/userside 是首先设置的,除了 application/config/config.php 之外,我看不到任何将 CI 与 /userside 联系起来的地方

权限已经过检查并且是相同的,所有者是相同的。

有人知道为什么这不起作用吗?我不想将站点拆分为子域,因为我们有特定的原因,并且它与 /userside 一起工作,只有一些简单的事情让我无法让 /adminside 工作。

【问题讨论】:

    标签: wordpress codeigniter url mod-rewrite


    【解决方案1】:

    您需要RewriteRule 来摆脱 index.php 附加方法:

    <IfModule mod_rewrite.c>
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^/userside(.*)$   /userside/index.php$1 [L]
        RewriteRule ^/adminside(.*)$  /adminside/index.php$1 [L]
        RewriteRule ^(.*)$ index.php/$1 [L]
    </IfModule>
    

    【讨论】:

    • 这对我不起作用,WP 站点停止工作,并且在 CI 区域中访问的任何内容都导致显示 WP 404 页面。
    • 好的,是的.. WP通常有它自己的htaccess;你会想要保留它,只需从我的答案中添加用户端和管理端重写并摆脱 ^(.*) 重写。
    【解决方案2】:

    这比我想象的要简单。

    您只需将 CI 的 .htaccess 放在要运行 CI 的子文件夹中,然后设置适当的站点 URL 变量以匹配。

    我确实找到了一个文档,该文档显示了如何通过简单地从 CI 的 index.php 中的 WP 端的根加载 wp-load.php 来让您从 CI 访问所有 WP 的库。

    希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多