Table of Contents
1. 概述
2. 使用 Nginx 实现 URL 的重定向
2.1 使用场景
2.2 单纯的重定向
2.3 依据原 URL 重定向
补充:Nginx根据url参数重定向
1.判断url路径
2. 判断url参数
Home Operation and Maintenance Nginx How to use Nginx to implement URL redirection

How to use Nginx to implement URL redirection

May 27, 2023 pm 10:16 PM
nginx url

    1. 概述

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

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

    2.1 使用场景

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

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

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

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

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

    2.2 单纯的重定向

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    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;

     }

    Copy after login

    2.3 依据原 URL 重定向

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    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;

    }

    Copy after login

    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路径

    1

    2

    3

    4

    5

    location / {

        if ($args ~* "/product-list?param1=val1&param2=val2") {

            rewrite ^ http://www.mysite.com/product-list/$arg_param1/$arg_param2? last;

        }

    }

    Copy after login

    2. 判断url参数

    1

    2

    3

    if ($arg_path = 'abc'){

        proxy_pass http://127.0.0.1/abc/$arg_path;

    }

    Copy after login

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    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;

        }

    Copy after login

    The above is the detailed content of How to use Nginx to implement URL redirection. For more information, please follow other related articles on the PHP Chinese website!

    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    Video Face Swap

    Video Face Swap

    Swap faces in any video effortlessly with our completely free AI face swap tool!

    Hot Tools

    Notepad++7.3.1

    Notepad++7.3.1

    Easy-to-use and free code editor

    SublimeText3 Chinese version

    SublimeText3 Chinese version

    Chinese version, very easy to use

    Zend Studio 13.0.1

    Zend Studio 13.0.1

    Powerful PHP integrated development environment

    Dreamweaver CS6

    Dreamweaver CS6

    Visual web development tools

    SublimeText3 Mac version

    SublimeText3 Mac version

    God-level code editing software (SublimeText3)

    How to check whether nginx is started How to check whether nginx is started Apr 14, 2025 pm 01:03 PM

    How to confirm whether Nginx is started: 1. Use the command line: systemctl status nginx (Linux/Unix), netstat -ano | findstr 80 (Windows); 2. Check whether port 80 is open; 3. Check the Nginx startup message in the system log; 4. Use third-party tools, such as Nagios, Zabbix, and Icinga.

    How to configure cloud server domain name in nginx How to configure cloud server domain name in nginx Apr 14, 2025 pm 12:18 PM

    How to configure an Nginx domain name on a cloud server: Create an A record pointing to the public IP address of the cloud server. Add virtual host blocks in the Nginx configuration file, specifying the listening port, domain name, and website root directory. Restart Nginx to apply the changes. Access the domain name test configuration. Other notes: Install the SSL certificate to enable HTTPS, ensure that the firewall allows port 80 traffic, and wait for DNS resolution to take effect.

    How to check nginx version How to check nginx version Apr 14, 2025 am 11:57 AM

    The methods that can query the Nginx version are: use the nginx -v command; view the version directive in the nginx.conf file; open the Nginx error page and view the page title.

    How to check the name of the docker container How to check the name of the docker container Apr 15, 2025 pm 12:21 PM

    You can query the Docker container name by following the steps: List all containers (docker ps). Filter the container list (using the grep command). Gets the container name (located in the "NAMES" column).

    How to configure nginx in Windows How to configure nginx in Windows Apr 14, 2025 pm 12:57 PM

    How to configure Nginx in Windows? Install Nginx and create a virtual host configuration. Modify the main configuration file and include the virtual host configuration. Start or reload Nginx. Test the configuration and view the website. Selectively enable SSL and configure SSL certificates. Selectively set the firewall to allow port 80 and 443 traffic.

    How to start nginx server How to start nginx server Apr 14, 2025 pm 12:27 PM

    Starting an Nginx server requires different steps according to different operating systems: Linux/Unix system: Install the Nginx package (for example, using apt-get or yum). Use systemctl to start an Nginx service (for example, sudo systemctl start nginx). Windows system: Download and install Windows binary files. Start Nginx using the nginx.exe executable (for example, nginx.exe -c conf\nginx.conf). No matter which operating system you use, you can access the server IP

    How to create containers for docker How to create containers for docker Apr 15, 2025 pm 12:18 PM

    Create a container in Docker: 1. Pull the image: docker pull [mirror name] 2. Create a container: docker run [Options] [mirror name] [Command] 3. Start the container: docker start [Container name]

    How to start containers by docker How to start containers by docker Apr 15, 2025 pm 12:27 PM

    Docker container startup steps: Pull the container image: Run "docker pull [mirror name]". Create a container: Use "docker create [options] [mirror name] [commands and parameters]". Start the container: Execute "docker start [Container name or ID]". Check container status: Verify that the container is running with "docker ps".

    See all articles