我正在使用Yii开发一个多语言Web应用程序。
我应用了更改来隐藏index.php,将urlFormat更改为路径并使用用户语言示例/it/index.php /en/index.php等添加到url路径slug ...
现在的问题是,一旦用户选择其他语言,我需要自动重定向到其他网址。例如:
http://localhost/~antonio/project/it/women 需要重定向到: http://localhost/~antonio/project/it/femme
我一直在玩htaccess而根本没有运气。这是实际的代码:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteBase /~antonio/project/
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
#My重定向代码(除此之外还尝试了几个没用的东西)
RewriteRule ^it/women$ it/femme
我真的很感激这个问题的任何帮助,因为它让我发疯。
由于
编辑::
我用mod_rewrite投降了。我通过将此代码添加到/layout/main.php找到了另一种解决方案:
<?php
$onurl = Yii::app()->getRequest()->requestUri;
if ($onurl == "/~antonio/project/it/women") {
$this->redirect("/~antonio/project/it/femme");
} elseif ($onurl == "/~antonio/project/it/men") {
$this->redirect("/~antonio/project/it/uomme");
}
根据语言/单词的组合进行冲洗和重复
答案 0 :(得分:0)
如果没有设置正确的虚拟主机,这可能无效(因此,您可以使用http://localhost/~antonio/project/it/women
这样的网址,而不是像http://project1.dev
那样的本地网址。但无论如何我会这样做,因为它会使您的开发环境变得更好! (Here's a place to start)。
无论如何,我会尝试这样做:只需保留.htaccess
文件集like you normally would for "path" style urls,然后使用UrlManager解析$_GET['lang']
参数?所以你在config.php中会有这样的urlManager设置:
'urlManager'=>array(
'urlFormat'=>'path', // use path style parameters
'showScriptName'=>false, // get rid of index.php
'rules'=>array(
// this parses out the first chunk of url into the "lang" GET parameter
'<lang:[\w\-]+>/<controller:[\w\-]+>/<action:[\w\-]+>'=>'<controller>/<action>',
)
)
这样,像http://project1.dev/it/controller/action
这样的网址将重定向到您的控制器中的“操作”操作,就像正常(控制器/操作)一样,但在您的操作中,$_GET['lang']
现在将具有“它”的值”
我希望有所帮助,这是一个黑暗中的镜头。我不确定你是如何实际触发不同语言的,所以$ _GET参数毕竟可能没什么用。
答案 1 :(得分:0)
在htaccess中找到了一种方法:
RewriteCond %{REQUEST_URI} ^/~antonio/project/it/donna/shoes/(.*)$
RewriteRule ^it/donna/shoes/(.*)$ /~antonio/project/it/donna/calzature/$1 [L,R]