Nginx使用get参数重写个人网址到漂亮的网址

时间:2016-02-16 16:16:25

标签: nginx

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

example.com/videos?c=18

为:

example.com/category/name

我尝试使用多个示例执行此操作,大多数没有效果,此示例仅向我提供了未找到所有/视频页面的页面:

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

这是否真的可以通过Nginx实现我想要实现的目标?

2 个答案:

答案 0 :(得分:2)

据我提出的问题,目前您的网站有此网址方案,您无法更改:

xdmp:permission()

但是,您希望向访问者展示“漂亮”的网址,例如

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

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

再次,您将虚拟重写为实际,而不是相反。

以下指令会将http://example.com/category/name 变为/category/cars/

/videos?c=cars

但您的脚本无法理解location /category { rewrite ^/category/(.*)$ /videos?c=$1 last; } 网址,需要使用类别ID才能使用。所以在你的情况下,漂亮的网址应该看起来像

/videos?c=cars

将被重写为

http://example.com/category/18

答案 1 :(得分:0)

“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
}