我有类别我想重写。 例如:
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实现我想要实现的目标?
答案 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
}