0

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

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

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

文件结构:

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]
4

2 回答 2

2

我能够自己完成这项工作。对于那些将来可能会发现这个问题的人,这些是从不同目录访问您的应用程序的步骤。考虑到上面问题中介绍的场景,以下示例将适用于在目录中部署应用程序的幽灵版本lang2

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

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、图像)都是从原始应用程序目录中的实际资产文件夹中获取的,例如lang1/app/assets

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

6.-添加.htaccess您通常的规则以保持您的 URL 友好,但这次将所有流量引导到您的应用程序的幽灵副本:

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

7.-喝啤酒或任何其他饮料来庆祝成功,始终遵守当地法律。利润。您的控制器必须读取该config('lang_version')值才能以适当的语言向用户呈现内容。您可以为此使用包含的语言助手,或您喜欢的任何其他解决方案。

于 2012-06-25T14:52:41.080 回答
0

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

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

为什么不使用这个?复制应用文件夹对您来说是不是有点乏味?有一个语言助手是有原因的。

我希望这有帮助。

于 2012-07-01T18:18:34.893 回答