nginx скрыть локаль Symfony от URL - PullRequest
0 голосов
/ 26 ноября 2018

У меня проблема с перезаписью URL на сервере nginx.Я хочу скрыть локаль Symfony от моего URL, поэтому www.example.com/fr/route должен быть www.example.com/route. В моем файле конфигурации nginx есть следующее:

location / {
    # try to serve file directly, fallback to app.php
    try_files $uri /app.php$is_args$args;
}

# PROD
location ~ ^/app\.php(/|$) {
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    internal;
}

, пожалуйста, помогите мне, и спасибозаранее.

я уже пробовал с .htaccess, но nginx не поддерживает файлы .htaccess

1 Ответ

0 голосов
/ 27 ноября 2018

Здравствуйте, и добро пожаловать на форум.

Поскольку вы пометили свой вопрос перезаписью URL, я предполагаю, что вы хотите добиться перезаписи URL вместо чего-то еще.то есть перезапись URL не «скрывает» эту часть URL, она переписывает URL и удаляет эту часть - это означает, что эта информация не будет доступна вам в вашем проекте Symfony.

Следующий nginxПравило будет переписывать URL-адреса:

rewrite ^/fr/(.*)$ /$1 permanent;    

Обратите внимание, что в целом было бы неплохо использовать непостоянный параметр при тестировании / создании таких правил, как это:

rewrite ^/fr/(.*)$ /$1 redirect; 

обновлено описание того, как "спрятать" локаль

Это то, что вам нужно сделать в вашем проекте Symfony вместо использования nginx.В качестве предупреждения, однако, документация Symfony явно рекомендует не использовать этот тип сокрытия локали (см. локаль и URL ).Но если вы по какой-то причине по-прежнему хотите скрывать локали такого типа, я бы предположил, что одним из подходов будет создание универсальных маршрутов перехвата для обработки ваших локалей - что-то вроде этого:

locale_redirect:
    path:  /{_locale}/{params}
    controller: App\Controller\LocaleRedirectController::locale
    requirements:
        _locale: en|fr|de
        params: '.+'

И в вашем контроллеречто-то вроде этого:

public function localeAction(Request $request, $locale, $params)
{
    // set the locale sticky
    // https://symfony.com/doc/current/session/locale_sticky_session.html

    // redirect to the url without the locale
    return new RedirectResponse("/$params");
}

Я на самом деле не пробовал этот код / ​​логику - и не буду этого делать, потому что документация Symfony советует против этого (по уважительным причинам) - поэтому могут быть некоторые небольшие проблемы сэтот пример кода / эта логика, которую вам нужно выяснить для себя, если вы решите пойти по этому пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...