2012-02-29 10 views
1

私はYiiで多言語のWebアプリケーションを開発しています。YiiとMod Rewrite:ユーザーの言語に翻訳されたURLにリダイレクト

私は

...、index.phpのを隠すために、変更を適用したパスにurlFormatを変更し、/it/index.php /en/index.phpなど、ユーザーの言語の例でURLパスにスラグを追加しました

問題は、ユーザーが別の言語を選択すると、自動的に別のURLにリダイレクトする必要があることです。たとえば:

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をして降伏しました。ように(

<?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"); 
} 

リンスをし、これが適切な仮想ホストを設定せずに動作しない場合があります言語/ワード

+1

あなたはどのように多くの言語をサポートしていますか?言語の選択はどのように行われますか? – ThinkingMonkey

答えて

0

はhtaccessファイルでこれを行う方法を発見:

RewriteCond %{REQUEST_URI} ^/~antonio/project/it/donna/shoes/(.*)$ 
RewriteRule ^it/donna/shoes/(.*)$ /~antonio/project/it/donna/calzature/$1 [L,R] 
0

の組み合わせごとに繰り返します。私はこのコードを追加することで、別の解決策が/layout/main.phpが判明しましたhttp://localhost/~antonio/project/it/womenのようなローカルURLの代わりにhttp://project1.devのような素晴らしいURLがあります)。しかし、それはあなたの開発環境をより良くするので、とにかくそれをやるでしょう! (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のようなURLは、通常のようなあなたのコントローラでは、「アクション」のアクション(コントローラ/アクション)にリダイレクトします。この方法ではなく、中あなたの行動$_GET['lang']は "it"の値になります。

私はそれは暗闇の中でショットのようなものだ、それは役立ちます願っています。私はどのように実際に異なる言語をトリガーしているのかよくわからないので、$ _GETパラメーターは結局役に立たないかもしれません。

関連する問題