> 운영 및 유지보수 > 엔진스 > Nginx를 사용하여 URL 리디렉션을 구현하는 방법

Nginx를 사용하여 URL 리디렉션을 구현하는 방법

WBOY
풀어 주다: 2023-05-27 22:16:20
앞으로
2804명이 탐색했습니다.

    1. 概述

    老话说的好:取乎上,得其中;取乎中,得其下。因此我们不妨把目标定的高一些,去努力,才能得到更好回报。

    2. 使用 Nginx 实现 URL 的重定向

    2.1 使用场景

    我们日常分享一个网站地址时,常常会有这样的效果,同样一个网址,在电脑的浏览器打开,是一种效果,而在手机的浏览器打开,就会展现出另一种更适合手机显示的效果。

    通常要达到这样的效果,有两种方式实现:

    一、使用自适应的 H5 页面实现,根据窗口宽度的大小,自动调整页面的布局。

    二、使用Nginx,依据终端的不同,跳转到不同的页面,电脑打开,跳转到 PC端 使用的网页,手机打开,跳转到 手机端 使用的网页。

    今天我们介绍一下第二种方式,是如何实现的。

    2.2 单纯的重定向

    有些 URL 的重定向,新 URL 不需要继承原 URL 的参数,例如 网站首页,这种情况,在 Nginx 配置文件的 location 中使用 return 302 的方式进行跳转即可。

    location / {
            # 判断是否是移动端
            if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
            {
                return 302 https://www.zhuifengren.com/h6/index.html;
            }
     
            proxy_pass http://myUpstream;
     }
    로그인 후 복사

    2.3 依据原 URL 重定向

    另一种情况就是 新 URL 需要继承原 URL 的参数,这种情况就需要使用 rewrite 对 URL 进行改写。

    location / {
            # 判断是否是移动端
            if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
            {
                rewrite (\w+-\w+)|(\?.*)$ https://www.zhuifengren.com/h6-$1-0.html$2 redirect;        
            }    
     
            proxy_pass http://myUpstream;
    }
    로그인 후 복사

    rewrite 的语法是: rewrite 正则表达式 改写后的URL redirect;

    其中 redirect 是 302 临时重定向的意思,也可以使用 permanent 关键字,代表 301 永久重定向。

    使用 rewrite 对 URL 进行改写,需要用到 正则表达式 的知识,改写后 URL 中的 $1、$2 代表正则表达式中匹配的第一个字符串和第二个字符串,这里大家可以去了解一下正则表达式,就不细说了。

    例子中的正则表达式 (\w+-\w+)|(\?.*)$,可以将原 URL:

    重写:这是一个链接,链接地址为 https://www.zhuifengren.com/1001-1223.jsp?v=123456

    改写为

    https://www.zhuifengren.com/h6-1001-1223-0.html?v=123456

    补充:Nginx根据url参数重定向

    1.判断url路径

    location / {
        if ($args ~* "/product-list?param1=val1&param2=val2") {
            rewrite ^ http://www.mysite.com/product-list/$arg_param1/$arg_param2? last;
        }
    }
    로그인 후 복사

    2. 判断url参数

    if ($arg_path = 'abc'){
    	proxy_pass http://127.0.0.1/abc/$arg_path;
    }
    로그인 후 복사

    需要特别注意的是,由于if语句的不稳定性,nginx并不支持多个if判断,也不支持类似于or的逻辑判断,因此只能采用下文所述的方法。

    location /api/ {
            if ($arg_token = '') {
            	proxy_pass http://127.0.0.1/abc
            }
            if ($http_token = '') {
                 proxy_pass http://127.0.0.2/abc
            }
            if ($token = paraheader) {
            	 proxy_pass http://127.0.0.3/abc
            }
            proxy_pass http://127.0.0.1:8080/app/;
            proxy_redirect off;
        }
    로그인 후 복사

    위 내용은 Nginx를 사용하여 URL 리디렉션을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:yisu.com
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿