nginx从url隐藏symfony区域设置
我在nginx服务器中有一个url重写问题。我想从我的url中隐藏symfony的区域设置,因此www.example.com/fr/route应该是www.example.com/route 我的nginx配置文件包含以下内容: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
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使用这种对区域设置参数的隐藏。非常感谢,我将继续使用会话方法来调整业务逻辑。最诚挚的问候