nginx从网址隐藏symfony语言环境

问题描述 投票:1回答:1

我有一个在nginx服务器上重写url的问题。我想从我的网址隐藏symfony的区域设置,所以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文件

symfony nginx url-rewriting
1个回答
2
投票

你好,欢迎来到论坛。

正如您使用url-rewriting标记了您的问题,我假设您想要实现url重写而不是其他内容。即url重写不是“隐藏”网址的那一部分,它正在重写网址并删除该部分 - 这意味着您的symfony项目中将无法使用此信息。

以下nginx规则将执行url重写:

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

请注意,在测试/创建这样的规则时,通常使用非永久性选项可能是个好主意:

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

更新了有关如何“隐藏”区域设置的信息

这是您在symfony项目中必须执行的操作,而不是使用nginx。但作为警告,symfony文档明确建议不要使用这种语言环境隐藏(请参阅The locale and the 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文档建议不要这样做(出于正当理由) - 所以这个示例代码/这个逻辑可能存在一些小问题,你需要弄清楚如果你决定走这条路,你自己。

© www.soinside.com 2019 - 2024. All rights reserved.