nginx的子目录301重定向怎么写
本文介绍了nginx的子目录301重定向怎么写的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
最近遇到这么一个问题,关于网站的。
PC 地址页面类似 www.abc.com/pc/123/index.html
对应的M端地址是 m.abc.com/sj/123/index.html
123这个目录不是固定的有其他的名字,pc和sj都是固定的,因此还存在其他这样的对应关系比如:
PC www.abc.com/pc/222/index.html
M 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.html
M m.abc.com/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.com/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 http://m.abc.com/sj/$name/;
}
}
这篇关于nginx的子目录301重定向怎么写的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文