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

编程入门 行业动态 更新时间:2024-10-25 14:30:10
本文介绍了nginx的子目录301重定向怎么写的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

问 题

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

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

现在我改成这样可是语法检测又通不过:`location ~/pc/ (.*) {

if ($http_user_agent~ * "((Android)|(blackberry)|(googlebot-mobile)|(iemobile)|(ipad)|(iphone)|(opera mobile)|(palmos)|(webos)|(UCBrowser)|(wap)|(Opera Mobi))") {

if ($uri~ * "/([a-zA-Z0-9+])/([a-zA-Z0-9+]/)") {

return 301 http: //m.abc/sj/$2/; } }

}`上面提示 提示这行 if ($uri~ * "/([a-zA-Z0-9+])/([a-zA-Z0-9+]/)") [emerg] "if" directive is not allowed here in

解决方案

答案在此:

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

更多推荐

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

本文发布于:2023-11-01 23:26:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1550712.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:子目录   重定向   nginx

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!