nginx从网址隐藏symfony语言环境

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx从网址隐藏symfony语言环境相关的知识,希望对你有一定的参考价值。

我有一个在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文件

答案

你好,欢迎来到论坛。

正如您使用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: AppControllerLocaleRedirectController::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文档建议不要这样做(出于正当理由) - 所以这个示例代码/这个逻辑可能存在一些小问题,你需要弄清楚如果你决定走这条路,你自己。

以上是关于nginx从网址隐藏symfony语言环境的主要内容,如果未能解决你的问题,请参考以下文章

如何从片段内的列表视图打开链接网址?

Nginx服务优化隐藏版本号

我无法从 firebase 获取下载网址()。请任何人帮助这是我的代码和错误。 (我正在使用片段)[重复]

Nginx优化---隐藏版本号与网页缓存时间

nginx网页优化 上

在android中显示隐藏片段