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