如何在 Nginx 中创建重写规则

NGINX 重写规则提供了一种强大的方法来修改和管理 Web 服务器上的 URL 请求。这些规则对于重定向 URL、更改 URL 结构和改进 SEO 至关重要。通过利用重写规则,您可以确保用户和搜索引擎能够高效地访问您的内容并保持干净、有序的 URL 结构。掌握重写规则可让您增强 Web 服务器的功能和灵活性,从而提供更好的整体用户体验。

本指南将解释如何在 NGINX 中创建重写规则,并提供清晰的示例和步骤来帮助您配置服务器以有效地处理 URL 修改。

NGINX 重写规则:返回指令

NGINX return 指令是管理服务器响应的强大工具。它主要用于将客户端重定向到不同的 URL 或发送特定的状态代码。此指令简化了重定向流量,尤其是在移动或重组网站时。它对于 SEO 和在过渡期间保持用户体验至关重要。让我们研究一个独特的示例来了解它的应用:

示例:假设您想将用户从旧页面重定向到新页面。在 NGINX 配置文件中,您可以使用 return 指令如下:

server {
    listen 80;
    server_name oldsite.com;
    return 301 http://newsite.com$request_uri;
}

在此示例中,对 oldsite.com 的任何请求都会永久重定向到 newsite.com,从而保留请求 URI。301 状态代码表示永久重定向,通知搜索引擎更新其索引。

NGINX 重写规则:重写指令

NGINX 重写指令用于在进一步处理之前以各种方式更改请求 URI。它比 return 指令更通用,允许根据条件进行复杂的 URL 操作。此功能对于创建 SEO 友好的 URL 和管理旧链接至关重要。

示例:假设您需要将动态 URL 转换为静态 URL,以实现更好的 SEO。您可以像这样使用重写指令:

server {
    listen 80;
    server_name example.com;
    location /products {
        rewrite ^/products/([0-9]+)/([0-9]+)$ /product?id=$1&page=$2 last;
    }
}

在此场景中,类似 example.com/products/123/2 的 URL 会在内部重写为 example.com/product?id=123&page=2。最后一个标志表示应停止重写过程并重新评估新的 URI。

NGINX 重写规则示例

在 NGINX 中实现 HTTPS 重写规则

确保通过 HTTPS 进行安全连接对于数据安全至关重要。NGINX 重写指令可以将所有 HTTP 流量重定向到 HTTPS,从而增强传输中数据的安全性。

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

在此示例中,对 example.com 的 HTTP 请求被重定向到 HTTPS,确保加密通信。

精简 URL:NGINX 重写规则中删除重复的斜线

有时,URL 可能包含重复的斜杠,从而导致混淆或错误。NGINX 的重写指令通过将带有双斜杠的 URL 转换为单斜杠来有效处理此问题。

server {
    server_name example.com;
    if ($request_uri ~* "\/\/") {
        rewrite ^/(.*)/$ /$1 permanent;
    }
}

此规则通过删除任何多余的斜杠来简化 URL。

目录重定向:NGINX 重写规则的实际应用

在重组或移动资源时,通常需要有效地重定向整个目录。NGINX 通过其重写规则实现了这一点。

location ^~ /old-directory/ {
    rewrite ^/old-directory/(.*)$ /new-directory/$1 permanent;
}

此命令将所有请求从 /old-directory/ 重定向到 /new-directory/。

使用 NGINX 中的重写规则进行查询字符串操作

根据查询字符串更改 URL 在网站重新设计期间尤其有用。NGINX 重写规则允许根据这些参数进行动态 URL 重构。

if ($args ~ "^id=(.*)&lang=(.*)") {
    set $id $1;
    set $lang $2;
    rewrite ^/page.php$ /page/$lang/$id? permanent;
}

在这里,重写规则将复杂的查询字符串转换为更简化的 URL。

确保统一的 URL:NGINX 重写规则中的尾部斜杠

URL 结构的统一性(例如尾随斜杠)对于网站一致性和 SEO 至关重要。

rewrite ^([^.]*[^/])$ $1/ permanent;

此规则确保所有 URL 都以斜杠结尾,保持标准化格式。

基于方法的重定向:在 NGINX 中使用重写规则

NGINX 允许基于特定请求方法(例如 POST)进行重定向,这对于安全地处理表单提交至关重要。

if ($request_method = POST ) {
    return 301 https://example.com$request_uri;
}

此命令将所有 POST 请求重定向到 HTTPS URL。

使用 NGINX 重写规则保护图像

通过防止未经授权的直接链接到您的图像来保护您的服务器资源。

location ~ .(gif|png|jpe?g)$ {
    valid_referers none blocked ~.google. ~.bing. ~.yahoo. example.com *.example.com;
    if ($invalid_referer) {
        rewrite ^/images/(.*)$ /stop-hotlinking.$1 last;
    }
}

此设置可使用无效的引荐来源重定向请求,从而有效地阻止热链接。

强制使用小写 URL 以保持一致性

在整个网站上维护小写的 URL 可增强一致性并避免混淆。

location ~ [A-Z] {
    rewrite ^(.*)$ $scheme://$host$1 lowercase;
}

此命令将任何大写的 URL 元素转换为小写。

处理 URL 结构的变化

在网站更新期间,适应新的 URL 结构而不损失流量或损害用户体验至关重要。

server {
    listen 80;
    server_name example.com;
    
    location ~* ^/oldpath/(.*) {
        rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;
    }
}

将用户和搜索引擎从旧 URL 重定向到新 URL。

为 CMS 平台创建干净的 URL

对于依赖查询字符串的 CMS 平台,NGINX 重写规则可以创建更干净、更适合 SEO 的 URL。

location / {
    try_files $uri $uri/ @extensionless-php;
    index index.html index.htm index.php;
}

location ~ \.php$ {
    try_files $uri =404;
}

location @extensionless-php {
    rewrite ^(/[^.]*[^/])$ $1.php last;
}

此设置将 URL 转换为更易读的格式,从而有可能提高 SEO 性能。

结论

通过在 NGINX 中创建和配置重写规则,您可以优化 URL 管理、改进 SEO 并确保无缝的用户体验。定期检查和测试您的重写规则,以确保它们按预期运行并根据需要进行调整。掌握 NGINX 重写规则可让您充分利用 NGINX 的强大功能,打造更具活力和响应能力的 Web 服务器。

Joshua James
跟我来
Joshua James 的最新帖子 (查看全部)

发表评论