从兄弟子目录访问CodeIgniter应用程序

时间:2012-06-22 16:52:42

标签: php .htaccess codeigniter dry

我有一个场景,我必须为不同的语言部署多个目录。开发最初集中在其中一种语言上,整个站点的一部分只是一个小型CI应用程序。

我正在尝试避免为其他几种语言复制整个应用程序,并使用.htacces重定向到该应用程序。后者工作正常,但是当从不同于真实的URL访问时,CI返回404错误。

我最好的猜测是某些配置文件必须存在具有配置其他根URL的唯一属性,但我不知道从哪里开始(并且Google没有提出类似的方案)。

文件结构:

public_html/
    lang1/
        app/    
            (the actual CI app)
        other static stuff...
    lang2/
        app/
            .htaccess (redirecting to /lang1/app/)
        other static stuff...
    lang3/
        ...

其他信息:

$config['base_url']设置为http://.../lang1/app/

.htaccess

RewriteEngine on
RewriteRule ^(.*)$ /lang1/app/$1 [L]

2 个答案:

答案 0 :(得分:2)

我能够通过自己的方式实现这一目标。对于那些可能在将来发现此问题的人,这些是从不同目录访问您的应用程序的步骤。考虑到上述问题中引入的场景,以下示例将适用于在lang2目录中部署应用程序的 ghost 版本:

1.- 复制 从CI安装的根目录(从lang1/app/index.php)到lang2/app/目录的index.php文件

2.- 编辑以下行:

$system_path = '../../lang1/app/system';


$application_folder = '../../lang1/app/application';
//Even if the documentation suggests the necessity of a _full path_, 
//this works perfectly well for 2.1.0

3.- 添加您可能要为所述子目录明确设置的任何配置,这些配置将设置为$ this-> config,替换基础配置文件中设置的值应用程序:

$assign_to_config['lang_version'] = 'lang2';

4.-你必须设置一个合适的base_url。在这种情况下,我们可以重用我们刚才包含的lang_version配置。这样,我们就可以在我们需要创建的下一种语言中忘记这一行。

$assign_to_config['base_url'] = 
    'http://www.example.com/' . $assign_to_config['lang_version'] . '/app/';

5.- .htaccess内创建 lang2/app文件,以确保HTML访问的任何静态资源(js,css,图像)都来自实际原始app目录中的assets文件夹,如lang1/app/assets

RewriteEngine on
RewriteRule ^assets/(.*)$ /lang1/app/assets/$1 [L]

6.- 添加到此.htaccess您的常用规则,以确保您的网址友好,但这次将所有流量引导至您应用的 ghost 副本:

RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteRule ^(.*)$ /lang2/app/index.php/$1 [L]

7.- 喝啤酒或任何其他饮料以庆祝成功,始终尊重您当地的法律。利润。您的控制器必须读取config('lang_version')值,以便以适当的语言向用户显示内容。您可以使用附带的语言助手或您喜欢的任何其他解决方案。

答案 1 :(得分:0)

你为什么要这样做?这是一个叫i18n的东西。

http://codeigniter.com/wiki/CodeIgniter_2.1_internationalization_i18n/

为什么不用这个?没有复制app文件夹对你来说似乎有点乏味?这是一个语言助手。

我希望这会有所帮助。