Проблема с контекстами Babel

Здравствуйте! у меня есть 5 контекстов: en|ua|ru|fr|de. Проблема заключается в том, что если я в web версии в адресной строке прописываю такую ссылку www.site.com/franchiza, то меня перебрасывает на 404 страницу франц. версии. Код htaccess и роутинга:
htaccess
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(en|ua|ru|fr|de)/favicon.ico$ favicon.ico [L,QSA]


RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(en|ua|ru|fr|de)/assets(.*)$ assets$2 [L,QSA]


RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(en|ua|ru|fr|de)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
и Роутинг
<?php
if($modx->context->get('key') != "mgr"){
                switch ($_REQUEST['cultureKey']) {
                        case 'ua':
                        /* switch the context */
                        $modx->switchContext('ua');
                        break;
                        case 'fr':
                        /* switch the context */
                        $modx->switchContext('fr');
                        break;
                    default:
                        /* Set the default context here */
                        $modx->switchContext('web');
                        break;
                }
                unset($_GET['cultureKey']);
            }
Vladyslav
23 мая 2024, 20:44
modx.pro
1 479
0

Комментарии: 1

Андрей Степаненко
26 мая 2024, 09:22
0
Ваша проблема связана с неправильным переключением контекстов в MODX. Убедитесь, что ваш .htaccess и скрипт роутинга правильно настроены для работы с Babel. Давайте рассмотрим основные моменты.

### .htaccess

В файле .htaccess у вас всё верно настроено для переадресации запросов на index.php с соответствующим `cultureKey` и `q`. Однако, убедитесь, что у вас есть следующие строки в начале файла:

```apache
RewriteEngine On
RewriteBase /
```

### Роутинг

Ваш скрипт переключения контекстов выглядит правильно, но добавьте дополнительную обработку для других языков и `cultureKey`. Также убедитесь, что у вас есть все необходимые контексты в MODX.

### Пример улучшенного роутинга

```php
<?php
if ($modx->context->get('key') != «mgr») {
$allowedLanguages = ['en', 'ua', 'ru', 'fr', 'de'];
$cultureKey = isset($_REQUEST['cultureKey'])? $_REQUEST['cultureKey']: 'en';

if (in_array($cultureKey, $allowedLanguages)) {
$modx->switchContext($cultureKey);
} else {
$modx->switchContext('web');
}

unset($_GET['cultureKey']);
}
```

### Проверка контекстов и ресурсов

1. Убедитесь, что контексты `en`, `ua`, `ru`, `fr`, `de` существуют в системе.
2. Проверьте, что ресурс `franchiza` существует в каждом контексте и имеет одинаковый alias.
3. Перейдите в менеджер ресурсов и убедитесь, что все ресурсы переведены и имеют правильные alias.

### Дополнительные настройки Babel

Убедитесь, что Babel правильно настроен для всех контекстов:

1. Перейдите в «Системные настройки» -> Babel.
2. Проверьте значения настройки `babel.contextKeys` (ключи всех контекстов, разделенные запятыми).

### Пример настройки Babel

```plaintext
babel.contextKeys = en,ua,ru,fr,de
```

Если проблема сохраняется, проверьте журнал ошибок MODX на наличие дополнительных подсказок.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1