nginx重定向带参数的问题

【字号: 日期:2022-07-19浏览:24作者:雯心

问题描述

嗯,我只把关键字换成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

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

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

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

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

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

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

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

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

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

相关文章: