下面是几条经典的伪静态规则,供大家学习参考:
permanent参数是永久性重定向,状态码是301
redirect参数临时重定向,状态码是302
根目录跳转二级目录
从http://wdzzz.com/?url=abc跳转到http://wdzzz.com/new/?url=abc
if ( $request_uri ~ ^/\?url= ) { rewrite ^/(.*)$ /news/$1 redirect; }
点评:难点在于这是在根目录进行跳转(仅有参数,特征非常不明显),并且前后参数一致(容易出现死循环,跳转到xiaoboy.cn/new/new/new/new/.......)。
301跳转
location / { if ($host ~ 'wdzzz.com'){ return 301 http://www.wdzzz.com$request_uri; }}
点评:根据host来判断域名,并进行跳转
不带www跳转到www
location / { if ($http_host ~* "^(xiaoboy\.cn)(:80)?"){ rewrite ^/(.*) http://www.xiaoboy.cn/$1 redirect; } }
参数跳转
if ($query_string ~* "tag=(.*?)$"){ set $tag $1; rewrite ^/plug/tags.asp$ /index.php?s=$tag? permanent; }
过滤参数
由于种种原因,带了不同参数,可能意味它是一个不同的文件,会造成各种资源浪费。下面就讲讲如何过滤参数
location /test/ { if ($args ~* "gpc=stf=(.*?)$") { rewrite ^ $scheme://$host/test/?s=$arg_s? permanent; } }
如上所示,参数中多出很多类似gpc=stf=的参数。那么如何去掉它呢?
首先区分路径test,然后判断gpc=stf=字符,接着直接跳转到新地址,并用$arg_s附上需要的s参数。