Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nginx从url隐藏symfony区域设置_Symfony_Nginx_Url Rewriting - Fatal编程技术网

nginx从url隐藏symfony区域设置

nginx从url隐藏symfony区域设置,symfony,nginx,url-rewriting,Symfony,Nginx,Url Rewriting,我在nginx服务器中有一个url重写问题。我想从我的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 ~ ^/ap

我在nginx服务器中有一个url重写问题。我想从我的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重写标记了您的问题,我假设您希望实现url重写,而不是其他东西。i、 e.url重写并不是“隐藏”url的这一部分,而是重写url并删除这一部分——这意味着这些信息在symfony项目中不可用

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

rewrite ^/fr/(.*)$ /$1 permanent;    
请注意,在测试/创建以下规则时,通常最好使用非永久性选项:

rewrite ^/fr/(.*)$ /$1 redirect; 
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项目中执行的操作,而不是使用nginx。作为警告,symfony文档明确建议不要使用这种区域设置隐藏(请参阅)。但是,如果出于某种原因,您仍然希望进行这种区域设置隐藏,我会假设一种方法是创建通用的捕获器路由来处理您的区域设置-类似这样:

rewrite ^/fr/(.*)$ /$1 redirect; 
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");
}
在你的控制器中有这样的东西:

rewrite ^/fr/(.*)$ /$1 redirect; 
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文档建议不要这样做(出于正当理由),所以如果您决定这样做,这个示例代码/这个逻辑可能会有一些小问题,您需要自己弄清楚。

您好,非常感谢您给出的清晰而有用的答案,如果我只需要隐藏区域设置,而不删除它,以便symfony可以使用它,那该怎么办?我如何实现这一点!再次感谢。我更新了答案,也涵盖了这个选项。但正如更新后的答案中所强调的,symfony文档明确建议不要对URL使用这种对区域设置参数的隐藏。非常感谢,我将继续使用会话方法来调整业务逻辑。最诚挚的问候