>我有类别想重写。例如:
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
}