通过 Nginx 从 URL 中删除多个目录

通过 Nginx 从 URL 中删除多个目录

我尝试使用 Nginx 从 URL 中过滤掉多个目录,但无济于事。我在网上看到的所有说明都只适用于仅需删除一个目录的情况,但没有人显示适用于删除多个目录的说明。

这是网址:

https://www.domain.com/pages/l/something.html

我想要的是:

https://www.domain.com/something.html

注意删除/页/l/部分。

另外,我需要重写 URL 并进行 301(永久)重定向,这样就不会损害 SEO。

我如何实现这个目标?

答案1

301这是一个重写规则,当用户访问以下任何文件/路径时,使 nginx 向浏览器发送重定向/pages/l/

location /pages/l/ {
    rewrite ^/pages/l(/.*)$ $1 permanent;
}

这里我们用正则表达式捕获路径/pages/l,然后将其用作重定向目标参数。

如果您想要匹配例如其下的任何一个字母目录/pages/及其下的任何文件,您可以使用以下命令:

location /pages/.?/ {
    rewrite ^/pages/.?(/.*)$ $2 permanent;
}

如果文件是静态 HTML 文件,无法从其当前目录位置移动到与新 URL 相对应的位置,则可以try_files像这样调整指令:

location / {
    try_files $uri $uri/ /pages/l$uri /index.php$args;
}

这里我们告诉 nginx 在 URI 指定的路径中查找实际文件,如果没有找到,则使用前缀/pages/l

不过,我强烈建议您物理移动这些文件,因为这种修改会增加系统的复杂性,并使维护变得更加困难。毕竟,对文件的请求被301重定向到新位置,因此用户看不到任何差异。

相关内容