ezplatform url (ez_route не соответствует маршруту домена

У меня простой сайт, базовый язык английский с переводом на немецкий.

Вот настройка доступа к сайту из ezplatform.yml

# Siteaccess configuration, with one siteaccess per default
siteaccess:
    default_siteaccess: en
    list:
        - en
        - de
    groups:
        site_group:
            - en
            - de
    match:
        URIElement: 1

# System settings, grouped by siteaccess and/or siteaccess group
system:
    site_group:
        api_keys: { google_maps: "xxx" }
        cache_pool_name: '%cache_pool%'
        var_dir: var/site
        translation_siteaccesses: [de, en]
    de:
        languages: [ger-DE, eng-GB]
    en:
        languages: [eng-GB]
    default:
        content:

Работает отлично, доступ к localhost:8000 отображает контент на английском языке, а localhost:8000/de отображает контент на немецком языке.

Затем я построил простой переключатель языка:

<ul>
    <li>

        <a href="{{ url( ez_route( null, {"language": "ger-DE"} ) ) }}" {% if ezpublish.siteaccess.name == 'de' %}class="inactive"{% endif %}>
            Deutsche
        </a>
    </li>
    <li>
        <a href="{{ url( ez_route( null, {"language": "eng-GB"} ) ) }}" {% if ezpublish.siteaccess.name == 'en' %}class="inactive"{% endif %}>
            English
        </a>
    </li>
</ul>

Но теперь я вижу, что есть проблема с дублированием контента для SEO. При доступе к немецкому языку переключатель языка печатает ссылку на доступ к сайту для английского языка как localhost:8000/en, где должно быть localhost:8000.

Как я могу сказать ez перенаправить все содержимое /en в /? Я думаю, что должно быть лучшее решение, но я не вижу, как в документах:/

Когда я изменяю работу сопоставителей на это:

siteaccess:
    default_siteaccess: en
    list:
        - en
        - de
    groups:
        site_group:
            - en
            - de
    match:
        Map\URI:
            /: en
            de: de

Для английского перевода я получаю // в URL-адресе для английского языка.


person John    schedule 19.08.2017    source источник
comment
просто не очень хороший обходной путь; если вы знаете, что eng-GB останется вашим доступом к сайту по умолчанию, почему бы вам просто не определить <a href="/" {% if ezpublish.siteaccess.name == 'en' %}class="inactive"{% endif %}>Englisch</a> ?   -  person Amir Koklan    schedule 20.08.2017
comment
Потому что это только маршруты на домашнюю страницу. Мне нужно переключить язык и вернуться на ту же страницу, например, "...com/somepage"   -  person John    schedule 20.08.2017


Ответы (1)


Мы используем эту конфигурацию сопоставления, и она работает нормально:

ezpublish:
    siteaccess:
        match:
            Compound\LogicalAnd:
                cro:
                    matchers:
                        Map\URI: { cro: true }
                        Map\Host: { '%site_domain%': true }
                    match: cro
            Map\Host:
                '%site_domain%': eng

Обратите внимание, что я использую параметр %site_domain%, который я сам определил в app/config/parameters.yml. Вы также можете сделать это или использовать жестко заданное значение.

Недостатком является то, что вам нужно добавить все новые сайты доступа в список в Compound\LogicalAnd сопоставителе, но если у вас есть простой сайт с несколькими сайтами доступа, я думаю, все должно быть хорошо.

person Edi Modrić    schedule 21.08.2017
comment
Есть ли что-нибудь еще, что мне нужно добавить к этому? Я изменил ваше совпадение с cro и eng на en и de, но в результате очистка кеша приводит к Uncaught Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException: You have requested a non-existent parameter "site_domain". in /mnt/4E6E45D36E45B48D/Work/privatezimmer/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php:84 - person John; 21.08.2017
comment
Сопоставление работает... но не с ключевым словом '%site_domain%'. Когда я жестко кодирую значения, это нормально, но в остальном нет. Я и еще один человек работаем над этим сайтом, и у нас обоих разные URL-адреса разработчиков и, конечно же, еще один для производства. Кажется, волшебный '%site_domain%' был бы идеальным, иначе мне пришлось бы жестко закодировать совпадение для всех доступов к сайту. - person John; 21.08.2017
comment
Извините, я должен был указать, что %site_domain% является параметром Symfony DIC, который я определил сам в app/config/parameters.yml :) Я обновил ответ, чтобы отразить это. - person Edi Modrić; 21.08.2017
comment
Я добавил запрос на вытягивание с новым руководством, возможно, вы могли бы взглянуть и убедиться, что оно не слишком далеко от истины: github.com/ezsystems/developer-documentation/pull/27 - person John; 22.08.2017
comment
Оставил там комментарий :) - person Edi Modrić; 22.08.2017