我有一个场景,我必须为不同的语言部署多个目录。开发最初集中在其中一种语言上,整个站点的一部分只是一个小型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]
答案 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文件夹对你来说似乎有点乏味?这是一个语言助手。
我希望这会有所帮助。