0

这是每个人的一个奇怪的问题。我有一种情况,现有网站上运行 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 <- 不起作用 - 显示 404

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

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

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

4

2 回答 2

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>
于 2012-11-14T14:15:28.383 回答
0

这比我想象的要简单一些。

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

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

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

于 2013-01-18T19:18:40.337 回答