Yii и Mod Rewrite: перенаправление на язык пользователя, переведенный URL - PullRequest
1 голос
/ 29 февраля 2012

Я разрабатываю многоязычное веб-приложение с Yii.

Я применил изменения, чтобы скрыть index.php, изменил urlFormat на path и добавил к пути url слаг с примером языка пользователя /it/index.php /en/index.php и т.д ...

Проблема сейчас в том, что мне нужно автоматически перенаправить на другой 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

# Мой код перенаправления (пробовал еще несколько раз, но это бесполезно)

RewriteRule ^it/women$ it/femme

Я был бы очень признателен за любую помощь в этом вопросе, как это сводит меня с ума.

Спасибо

Edit ::

Я сдался с 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");
} 

Промыть и повторить для каждой комбинации язык / слово

Ответы [ 2 ]

0 голосов
/ 05 марта 2012

Нашел способ сделать это в htaccess:

RewriteCond %{REQUEST_URI} ^/~antonio/project/it/donna/shoes/(.*)$
RewriteRule ^it/donna/shoes/(.*)$ /~antonio/project/it/donna/calzature/$1 [L,R]
0 голосов
/ 02 марта 2012

Это может не работать без настройки правильного виртуального хоста (так что вместо локальных URL-адресов, таких как http://localhost/~antonio/project/it/women, у вас есть хорошие URL-адреса, такие как http://project1.dev).Но я бы так и сделал, так как это делает вашу среду разработки лучше!( Вот место для начала ).

В любом случае, я бы попробовал это: просто оставьте .htaccess набор файлов , как вы обычно это делаете для URL-адресов в стиле «путь» , а затем просто проанализируйте параметр $_GET['lang'] с помощью UrlManager?Таким образом, вы должны иметь такую ​​настройку urlManager в вашем config.php:

'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>',
  )
)

Таким образом, URL-адрес, подобный этому http://project1.dev/it/controller/action будет перенаправлять на действие "action" в вашем контроллере, как обычно (контроллер / действие), но в вашем действии $_GET['lang'] теперь будет иметь значение «оно».

Надеюсь, это поможет, это своего рода выстрел в темноте.Я не уверен, как вы на самом деле запускаете разные языки, поэтому параметр $ _GET может оказаться бесполезным.

...