Nginx使用get参数重写单个URL为漂亮的URL



>我有类别想重写。例如:

example.com/videos?c=18

自:

example.com/category/name

尝试使用多个示例来执行此操作,大多数都没有效果,此示例只给了我所有/videos页面未找到的页面:

location  /videos {
if ($args ~ "c=18") {
rewrite ^/videos(.*) http://$server_name/category/name$1 permanent;
}
}

这甚至可以纯粹通过 Nginx 实现我想要实现的目标吗?

据我所知,目前您的网站有这个 url 方案,您无法更改:

http://example.com/videos?c=18

但是您想向访问者展示"漂亮"的URL,例如

http://example.com/category/name

该漂亮的URL在网站上的任何地方都不存在,这就是为什么您必须重写它的原因,例如,将漂亮的虚拟URL转换为脚本可以处理的真实URL。

再一次,你虚拟重写到实际,而不是相反。

以下指令将把/category/cars/变成/videos?c=cars

location /category {
    rewrite ^/category/(.*)$ /videos?c=$1 last;
}

但是您的脚本无法理解/videos?c=cars url,它需要类别 ID 才能工作。所以在你的情况下,漂亮的网址应该看起来像

http://example.com/category/18

将被重写为

http://example.com/videos?c=18

"if" 指令不是最佳解决方案,但在您的情况下,您可以尝试 "if" 和 $arg_name(请求行中的参数名称(:

location /videos {
  if ($arg_c = "18") {
    rewrite ^/videos(.*) http://$server_name/category/cars? permanent;
  }
  if ($arg_c = "19") {
    rewrite ^/videos(.*) http://$server_name/category/bikes? permanent;
  }
  # and so on
}

最新更新