搜索

首页  >  问答  >  正文

nginx重定向带参数的问题

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

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

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

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

刚才又看到了这个

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

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

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

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

滿天的星座滿天的星座2783 天前904

全部回复(1)我来回复

  • 習慣沉默

    習慣沉默2017-05-16 17:17:56

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

    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= last;

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

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

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

    回复
    0
  • 取消回复