nginx重定向带参数的问题

查看:430
本文介绍了nginx重定向带参数的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

嗯,我只把关键字换成aaabbb了。
下面这个意思是我访问 /aaabbb/anime 实际上是请求的/ab_anime.php

location /aaabbb/ {
        rewrite ^/aaabbb/(\w+)$ /ab_$1.php last;
        rewrite "/aaabbb/(\w+)/(\d{1,2})$" /aaabbb/$1?id=$2? permanent;
    }

然后我想弄个第一次点进去就带参数,同时地址栏上不能看到,然后每次刷新的话就没参数。

所以查了下不带参数是后面加问号,但发现没用。
是不是因为我自己拼了$1?id=$2这个的缘故。
只是在地址栏给后面加的参数会不见。然而并没有什么卵用。

刚才又看到了这个

    rewrite  ^/test.php  /new  permanent;       //重写向带参数的地址

    rewrite  ^/test.php  /new?  permanent;      //重定向后不带参数

    rewrite  ^/test.php   /new?id=$arg_id?  permanent;    //重定向后带指定的参数

我都不知道怎么办了……难道是要再写一条然后用$arg???

解决方案

我觉得题主把问题复杂化了。
当然我并不确定我真的理解了题主的需求,试阐述如下:

  1. 用户请求/aaabbb/anime

  2. nginx正确解析为/aaabbb.php?id=anime,返回内容A给用户

  3. 用户的地址栏显示为/aaabbb,并享受内容A

  4. 用户刷新浏览器,定向为/aaabbb,享受/aaabbb.php的内容B。(或者继续阅读内容A)

这里有一个bug,请求为/aaabbb/anime的时候,地址栏最多变成/aaabbb/anime#xxxxxx,#之前是是不会变得,#之后的是hash。如果想要把地址栏变成/aaabbb,必须有一个redirect的动作。

我的思路如下:(如果采取了答案,请评论我解决方案里不正确的内容)

  1. nginx 重写策略为 rewrite ^/aaabbb/(\w+)$ /redirect.php?target=$1 last;

  2. redirect.php把target写入session,并返回redirect到/aaabbb上(能且只能通过此方法修改地址栏)

  3. /aaabbb/导航到index.php,读取session里的target,抹掉(或者不抹掉)它,调用对应php文件返回内容。

  4. 刷新/aaabbb时,导航到index.php,同样根据session来响应请求。

这篇关于nginx重定向带参数的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆