问题描述
嗯,我只把关键字换成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来响应请求。