nginx的子目录301重定向怎么写

浏览:42日期:2022-06-24

问题描述

最近遇到这么一个问题,关于网站的。PC 地址页面类似 www.abc.com/pc/123/index.html对应的M端地址是 m.abc.com/sj/123/index.html123这个目录不是固定的有其他的名字,pc和sj都是固定的,因此还存在其他这样的对应关系比如:PC www.abc.com/pc/222/index.htmlM m.abc.com/sj/222/index.html

这里需要在nginx做判断并跳转,我原来的写法是:

location /pc/ { if ($http_user_agent ~* '((Android)|(blackberry)|(googlebot-mobile)|(iemobile)|(ipad)|(iphone)|(opera mobile)|(palmos)|(webos)|(UCBrowser)|(wap)|(Opera Mobi))'){ return 301 http://m.abc.com/sj$request_uri;}

很显然上面的写法会变成这样的跳转对应:PC www.abc.com/pc/222/index.htmlM m.abc.com/sj/pc/222/index.html 这不是我想要的。 $request_uri如何去掉那个pc目录?求大神。如何改写?

问题解答

回答1:

location ~ /pc/(.*) { if ($http_user_agent ~* '((Android)|(blackberry)|(googlebot-mobile)|(iemobile)|(ipad)|(iphone)|(opera mobile)|(palmos)|(webos)|(UCBrowser)|(wap)|(Opera Mobi))'){ return 301 http://m.abc.com/sj/$1;}不知道这样行不行回答2:

location ~ ^/pc/(.*) { if ($http_user_agent ~* '((Android)|(blackberry)|(googlebot-mobile)|(iemobile)|(ipad)|(iphone)|(opera mobile)|(palmos)|(webos)|(UCBrowser)|(wap)|(Opera Mobi))') {return 301 http://m.abc.com/sj/$1; }}

相关文章: