Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   Не работают ссылки вида index.php?id=1&L=1 (http://forum.typo3.ru/showthread.php?t=8982)

gabdullin 26.10.2010 18:25

Не работают ссылки вида index.php?id=1&L=1
 
Добрый день, коллеги!

На сайте работает мыльтиязычность настроенная на разные домены
domain.ru - русская версия сайта
domain.com - английская
в таком варианте все работает, как надо, работают ссылки вида:
domain.ru/ru/
domain.ru/en/
domain.com/ru/
domain.com/en/
но не работают ссылки вида:
http://domain.ru/index.php?id=1&L=1 (по идее должен быть английский, но выводит русский)
Отключаем RealURL эти ссылки начинают работать.

Что может быть? Помогите, пожалуйста!

Вот конфиг RealURL
Код:

<?php
$TYPO3_CONF_VARS['EXTCONF']['realurl'] = array (
        domain.ru' => array (
                'init' => array(
                        'enableCHashCache' => true,
                        'appendMissingSlash' => 'ifNotFile',
                        'enableUrlDecodeCache' => true,
                        'enableUrlEncodeCache' => true,
                        'emptyUrlReturnValue' => '/',
                ),
                'preVars' => array (
                        array (
                                'GETvar' => 'no_cache',
                                'valueMap' => array (
                                ),
                                'noMatch' => 'bypass',
                        ),
                        array (
                                'GETvar' => 'L',
                                'valueMap' => array (
                                        'ru' => '0',
                                        'en' => '1'
                                ),
                                'noMatch' => 'bypass',
                                'valueDefault' => 'ru',
                        ),
                        array (
                                'GETvar' => '0',
                                'valueMap' => array (
                                ),
                                'noMatch' => 'bypass',
                        ),
                ),
                'pagePath' => array (
                        'type' => 'user',
                        'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
                        'spaceCharacter' => '-',
                        'languageGetVar' => 'L',
                        'languageExceptionUids' => '',
                        'languageField' => 'sys_language_uid',
                        'transOrigPointerField' => 'l18n_parent',
                        'autoUpdate' => true,
                        'expireDays' => 3,
                        'rootpage_id' => 1,
                ),
                'fixedPostVars' => array (
                        '8' => array (
                                array (
                                        'GETvar' => 'tx_indexedsearch[ext]',
                                        'valueMap' => array (
                                                'advanced' => 1,
                                        ),
                                        'noMatch' => 'bypass',
                                ),
                        ),
                ),
                'postVarSets' => array (
                        '_DEFAULT' => array (
                                // news archive parameters
                                'view' => array (
                                        array (
                                                'GETvar' => 'tx_ttnews[year]',
                                        ),
                                        array (
                                                'GETvar' => 'tx_ttnews[month]',
/*                                                'valueMap' => array(
                                                        'january' => '01',
                                                        'february' => '02',
                                                        'march' => '03',
                                                        'april' => '04',
                                                        'may' => '05',
                                                        'june' => '06',
                                                        'july' => '07',
                                                        'august' => '08',
                                                        'september' => '09',
                                                        'october' => '10',
                                                        'november' => '11',
                                                        'december' => '12',
                                                )
                                                */
                                        ),
                                        array (
                                                'GETvar' => 'tx_ttnews[day]',
                                        ),
                                ),
                                // news pagebrowser
                                'browse' => array (
                                        array (
                                                'GETvar' => 'tx_ttnews[pointer]',
                                        ),
                                ),
                                // news categories
                                'category' => array (
                                        array (
                                                'GETvar'          => 'tx_ttnews[cat]',
                                                'lookUpTable' => array (
                                                        'table' => 'tt_news_cat',
                                                        'id_field' => 'uid',
                                                        'alias_field' => 'title',
                                                        'addWhereClause' => ' AND NOT deleted',
                                                        'useUniqueCache' => 1,
                                                        'useUniqueCache_conf' => array (
                                                                'strtolower' => 1,
                                                                'spaceCharacter' => '-',
//                                                                'encodeTitle_userProc' => 'user_realurlEncTitle->process',
                                                        ),
                                                ),
                                        ),
                                ),
                                // news articles and searchwords
                                'article' => array (
                                        array (
                                                'GETvar' => 'tx_ttnews[tt_news]',
                                                'lookUpTable' => array (
                                                        'table' => 'tt_news',
                                                        'id_field' => 'uid',
                                                        'alias_field' => 'title',
                                                        'addWhereClause' => ' AND NOT deleted',
                                                        'useUniqueCache' => 1,
                                                        'useUniqueCache_conf' => array (
                                                                'strtolower' => 1,
                                                                'spaceCharacter' => '-',
//                                                                'encodeTitle_userProc' => 'user_realurlEncTitle->process',
                                                        ),
                                                ),
                                        ),
                                        array (
                                                'GETvar' => 'tx_ttnews[swords]',
                                        ),
                                ),
                        ),
//                        '16' => '171',
                ),
                'fileName' => array (
#                        'defaultToHTMLsuffixOnPrev'=>1,
                        'index' => array (
                                'rss.xml' => array (
                                        'keyValues' => array (
                                                'type' => 100,
                                        ),
                                ),
                                'rss091.xml' => array (
                                        'keyValues' => array (
                                                'type' => 104,
                                        ),
                                ),
                                'rdf.xml' => array (
                                        'keyValues' => array (
                                                'type' => 101,
                                        ),
                                ),
                                'atom.xml' => array (
                                        'keyValues' => array (
                                                'type' => 103,
                                        ),
                                ),
                                'atom03.xml' => array (
                                        'keyValues' => array (
                                                'type' => 102,
                                        ),
                                ),
                                'sitemap.xml' => array (
                                        'keyValues' => array (
                                                'type' => 200,
                                        ),
                                ),
                        ),
                ),
        ),
        'domain.com' => 'domain.ru',
        '_DOMAINS' => array (
                'encode' => array (
                        array (
                                'GETvar' => 'L',
                                'value' => '0',
                                'ifDifferentToCurrent' => true,
                                'useConfiguration' => 'domain.ru',
                                'urlPrepend' => 'http://domain.ru'
                        ),
                        array (
                                'GETvar' => 'L',
                                'value' => '1',
                                'ifDifferentToCurrent' => true,
                                'useConfiguration' => 'domain.com',
                                'urlPrepend' => 'http://domain.com'
                        ),
                ),
                'decode' => array (
                        'domain.ru' => array (
                                'GETvars' => array (
                                        'L' => '0'
                                ),
                                'useConfiguration' => 'domain.ru'
                        ),
                        'domain.com' => array (
                                'GETvars' => array (
                                        'L' => '1'
                                ),
                                'useConfiguration' => 'domain.com'
                        ),
                ),
        ),
);
?>


mazaev 26.10.2010 23:00

RealUrl расширение которое превращает из id=1&L=1 в /ru.
Можно глупый вопрос? Зачем Вам такая ссылка?
При работе работе с RealUrl рекомендуется генерировать ссылки через typolink. Тогда все будет преобразовываться как нужно.

gabdullin 26.10.2010 23:39

Цитата:

Сообщение от mazaev (Сообщение 29278)
Можно глупый вопрос? Зачем Вам такая ссылка?

Ссылки вида index.php?id=1&L=1 нужны в следующих случаях:
1. при редактировании контента на английском языке, если страница не активна, просмотр ее вызывает затруднения, т.к. вместо английского, я вижу русский вариант в просмотре.
2. tt_news выводит в LIST и SINGLE, для английского варианта выводит транслитерованные алиасы русского варианта новости, вместо английского алиаса. В то время как dd_googlesitemap генерирует английские алиасы. Таким образом для английского варианта сайта поисковик находит две одинаковые страницы по двум адресам, что не есть хорошо для SEO.
3. в индексированном поиске результаты в английском варианте для новостей не выводятся, зато в русском показывает результаты и на английском и на русском.

P.S. До привязывания языков к разным доменам все работало отлично, таким образом я предполагаю, что проблема заключается в операции декодирования URL модуля realurl, поскольку в конфигурировании realurl я ошибок не обнаружил, хотя возможно я и заблуждаюсь на этот счет, почему и спросил.

P.P.S. Если кому-то станет интересно локализовать ошибку, готов дать доступ к админке и на FTP. Готов, также, обсудить вопрос разумной материальной компенсации за решение данного вопроса.

Андрей Аксенов 27.10.2010 10:20

Может стоит почитать этот документ: http://typo3.org/documentation/docum...de/1.1.0/view/
Я думаю, что все ответы там есть - вопрос лишь в грамотной настройке.

gabdullin 27.10.2010 10:33

Цитата:

Сообщение от Андрей Аксенов (Сообщение 29283)
Может стоит почитать этот документ: http://typo3.org/documentation/docum...de/1.1.0/view/
Я думаю, что все ответы там есть - вопрос лишь в грамотной настройке.

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

Андрей Аксенов 27.10.2010 11:37

ну да, недочитал про "отключаем RealURL - начинает работать нормально"...
Значит проблема с ним... А что, если убрать "свои" настройки для RealURL и попробовать по-умолчанию? Будет ли работать?
И еще... Может что-то есть здесь: http://dmitry-dulepov.com/article/re...-easy-way.html
Перевод этой статьи:
Цитата:

Легкое разделение языковых доменов при помощи RealURL
TYPO3 имеет полную поддержку создания многодоменных сайтов. Все знают параметр L в URL. Но что, если нужно создать раздельные домены для каждого языка в одном дереве страниц? До недавнего времени это было непросто сделать, и требовало определенной черной магии TYPO3. Здесь описано, как это сделать за 5 (или меньше) минут, а в качестве подарка получить лучшие позиции сайта в Google.
Обычно, при переключении языка сайта, в URL присутствует переменная L ('&L=1'). При использовании RealURL это будет выглядеть лучше, URL станет похож на http://example.com/en/. Вид значительно улучшился.
Проблема в том, что Google и другие поисковые движки предпочитают сервера в пользовательской доменной зоне. При одной ссылке, Google предпочтет домен «ru», домену «com», для русского и домен «de», для немецкого сайта. Поэтому, для поисковой оптимизации, становиться важным иметь домен в соответствующей стране зоне. Зарегистрировать домен просто, но как заставить RealURL использовать его, оставаясь в одном дереве страниц.
Разрешение этой проблемы — удаление языкового сегмента из URL, и преобразование http://example.com/ru/mypage в http://example.ru/mypage/ .
Возможно заполучить такие домены в TYPO3 после некого нетривиального колдовства с TypoScript. В качестве альтернативы — посредством написания кода. Но значительно проще, лучше и быстрее использовать RealURL.
Возможности RealURL для «языковых доменов»
Начиная с версии 1.5.0 RealURL поддерживает «языковые домены». Это именно то, что было описано выше: преобразование http://example.com/ru/mypage в http://example.ru/mypage/ прозрачно и без серьезных услий в TYPO3. Эта особенность требует лишь небольшой настройки RealURL.
Требования для настройки языковых доменов
Для включения языковых доменов, в настройках RealURL должно быть следующее:
определение языковых переменных в разделе preVars (смотрите выше)
специальную настройку _DOMAINS
С первой частью вопросов не возникает. А второе — что-то новенькое. Давайте сделаем ее!
Настройка _DOMAINS в RealURL
Настройка _DOMAINS описывает, как преобразуются значения параметров в URL в доменное имя. Другими словами, связывает переменную &L=0 с example.de, а &L=1 с example.ru.
Поддержка для этих языков настраива­ется в preVars примерно так:
'preVars' => array(
    array(
        'GETvar' => 'L',
        'valueMap' => array(
            'de' => 0,
            'ru' => 1
        ),
    ),
),
Теперь нужно определить, как эта preVar преобразуется в домены. А вот как:
'_DOMAINS' => array(
    'encode' => array(
        array(
            'GETvar' => 'L',
            'value' => '0',
            'useConfiguration' => 'example.com',
            'urlPrepend' => 'http://example.de'
        ),
        array(
            'GETvar' => 'L',
            'value' => '1',
            'useConfiguration' => 'example.com',
            'urlPrepend' => 'http://example.ru'
        )
    ),
    'decode' => array(
        'example.de' => array(
            'GETvars' => array(
                'L' => '0',
            ),
            'useConfiguration' => 'example.com'
        ),
        'example.ru' => array(
            'GETvars' => array(
                'L' => '1',
            ),
            'useConfiguration' => 'example.com'
        )
    )
)
Что здесь делается?
Первая часть кодирует URL. Здесь говориться, что при L=0 RealURL должно подставить http://example.de в URL (обратите внимание, без слеша в конце!). Для L=1 RealURL должно подставить http://example.ru в URL. Просто, не правда ли?
Вторая часть нужна для расшифровки. Она говорит RealURL, какой параметр L нужно установить, когда пользователь приходит на соответствующий домен. Также просто.
И финальное дополнение к настройкам:
$TYPO3_CONF_VARS['EXTCONF']['realurl']['example.de'] =
    $TYPO3_CONF_VARS['EXTCONF']['realurl']['example.ru'] = 'example.com';
Не забудьте добавить две новых записи для языковых доменов на корневую страницу в модуле Список.

gabdullin 27.10.2010 18:27

Цитата:

Сообщение от Андрей Аксенов (Сообщение 29289)
ну да, недочитал про "отключаем RealURL - начинает работать нормально"...
Значит проблема с ним... А что, если убрать "свои" настройки для RealURL и попробовать по-умолчанию? Будет ли работать?
И еще... Может что-то есть здесь: http://dmitry-dulepov.com/article/re...-easy-way.html
Перевод этой статьи:

Спасибо за качественный перевод статьи Дулепова, именно по этой статье я и настраивал переадресацию на домены. Путем экспериментов c изменением настроек realurl выяснил, что проблема возникает на стадии кодирования ссылок, поэтому либо я ошибся в конфигурировании этого куска realurl:
Код:

        '_DOMAINS' => array (
                'encode' => array (
                        array (
                                'GETvar' => 'L',
                                'value' => '0',
                                'ifDifferentToCurrent' => true,
                                'useConfiguration' => 'domain.ru',
                                'urlPrepend' => 'http://domain.ru'
                        ),
                        array (
                                'GETvar' => 'L',
                                'value' => '1',
                                'ifDifferentToCurrent' => true,
                                'useConfiguration' => 'domain.com',
                                'urlPrepend' => 'http://domain.com'
                        ),
                ),

либо в функции, выполняющей кодирование ссылок.

Андрей Аксенов 27.10.2010 18:59

Кстати, логичнее было бы, чтобы русскоязычный сегмент относился к domain.ru, а англоязычный - к domain.com
И еще, может это опечатка, но в настройках следующее:
PHP код:

<?php
$TYPO3_CONF_VARS
['EXTCONF']['realurl'] = array (
    
domain.ru' => array (

а надо бы:
PHP код:

<?php
$TYPO3_CONF_VARS
['EXTCONF']['realurl'] = array (
    
'domain.ru' => array (

т.е. пропущена она кавычка перед domain.ru...

Тогда (если использовать ru - для русского языка, а com - для английского):
PHP код:

$TYPO3_CONF_VARS['EXTCONF']['realurl'] = array (
    
'domain.ru' => array (
...
'preVars' => array(
    array(
        
'GETvar' => 'L',
        
'valueMap' => array(
            
'ru' => 0,
            
'en' => 1
        
),
    ),
),
...
'_DOMAINS' => array(
    
'encode' => array(
        array(
            
'GETvar' => 'L',
            
'value' => '0',
            
'useConfiguration' => 'domain.ru',
            
'urlPrepend' => 'http://domain.ru'
        
),
        array(
            
'GETvar' => 'L',
            
'value' => '1',
            
'useConfiguration' => 'domain.ru',
            
'urlPrepend' => 'http://domain.com'
        
)
    ),
    
'decode' => array(
        
'domain.ru' => array(
            
'GETvars' => array(
                
'L' => '0',
            ),
            
'useConfiguration' => 'domain.ru'
        
),
        
'domain.com' => array(
            
'GETvars' => array(
                
'L' => '1',
            ),
            
'useConfiguration' => 'domain.ru'
        
)
    )



gabdullin 28.10.2010 13:53

Цитата:

Сообщение от Андрей Аксенов (Сообщение 29299)
Кстати, логичнее было бы, чтобы русскоязычный сегмент относился к domain.ru, а англоязычный - к domain.com

У меня так и сделано...

Цитата:

Сообщение от Андрей Аксенов (Сообщение 29299)
т.е. пропущена она кавычка перед domain.ru...

Это опечатка...

Андрей Аксенов 28.10.2010 14:58

Как вариант, может быть ошибка в самом RealURL, хотя и маловероятно, но все же...
можно написать на офф. форуме багов...
У меня была другая ситуация с RealURL - не прописывались аллиасы для страниц - оказалось баг, Дмитрий исправил в очередной версии. Может и это из этой же серии?


Часовой пояс GMT +4, время: 23:05.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot