【问题标题】:CodeIgniter in Sub-directory gives 404 error, when CodeIgniter is installed in / root folder also子目录中的 CodeIgniter 给出 404 错误,当 CodeIgniter 安装在 / 根文件夹中时
【发布时间】:2014-04-21 13:15:31
【问题描述】:

我有一个使用 CodeIgniter 创建的站点,该应用程序安装在 Web 根目录 (/) 上。这是 GoDaddy 上的共享托管环境。为了创建开发环境,我复制了相同的内容并在 / 根目录中创建了一个 /development 文件夹。

现在,我的主站点运行良好,但是当我尝试使用子目录上的任何链接(链接到不同的域名)时,它总是给我一个 404 错误。

我已经尝试过 Stackoverflow 上给出的解决方案,但它不起作用。

重复:CodeIgniter won't run in a subdirectory

所以我的结构是:

/system
/application1
/index.php
/.htaccess
/development/application2
/development/index.php
/development/.htaccess

顶层 .htaccess 包含:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ index.php?/$1 [L]

    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ index.php/$1 [L]

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

子目录.htaccess是:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /development/

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ index.php?/$1 [L]

    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ index.php?/$1 [L]

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

<IfModule !mod_rewrite.c>
    ErrorDocument 404 index.php
</IfModule> 

(我什至尝试过 StackOverflow 上给出的在 INDEX.PHP 文件前添加 ./ 的建议,以及另一张票中提供的建议)

子目录下的$system_path指向顶层/system文件夹,避免冲突。

主页在网站上正确显示,甚至子域的主页,创建为:

http://www.mysite.co/ 
http://development.mysite.co/

但是创建的子域中的任何链接都显示 404 错误,我无法让任何链接正常工作。

我在 GoDaddy 上的共享服务器 (Linux) 上托管并安装了 PHP 5.3。 主根位于某个位置(绝对路径):/home/content/22/88885555/html

我创建的子目录位于(绝对路径):/home/content/22/88885555/html/development

我使用的路径为:

/
/development/

有没有人知道或尝试过这样的设置?

【问题讨论】:

    标签: php apache .htaccess codeigniter mod-rewrite


    【解决方案1】:

    在 /index.php 中修改以下行:

    $system_path = "/path/to/your/public_html/system";
    $application_folder = "/path/to/your/public_html/application1";
    

    现在编辑 /application1/config/config.php

    找到以下几行并更改为您的域名。

    $config['base_url'] = 'http://mysite.co';
    $config['index_page'] = ''; 
    

    打开/.htaccess并修改如下:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    ReWriteCond %{HTTP_HOST} mysite.co
    RewriteCond $1 !^(index\.php|development)
    ReWriteRule ^(.*)$ /index.php/$1 [L]
    
    ReWriteCond %{HTTP_HOST} development.mysite.co
    ReWriteCond %{REQUEST_URI} !development/
    
    ReWriteRule ^(.*)$ development/index.php/$1 [L]
    

    现在是您的子目录应用程序。

    打开/development/index.php

    修改以下行以匹配您的设置:

    $system_path = "/path/to/your/public_html/system";
    $application_folder = "/path/to/your/public_html/development/application2";
    

    注意system_path和application1一样吗?

    修改application2的配置文件。打开 /development/application2/config/config.php 并将基本 url 修改为您的测试站点。

    $config['base_url'] = 'http://development.mysite.co';
    

    最后删除 /development/.htaccess。

    【讨论】:

    • 不,还是不行!我什至尝试为子文件夹使用不同的 URL/域(即mysite1.co),并将主站点作为子域(即prod.mysite.co,它重新指向mysite.co),但没有解决方案。
    猜你喜欢
    • 2018-06-26
    • 2011-01-31
    • 2016-11-23
    • 1970-01-01
    • 2011-06-23
    • 2013-03-28
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多