我尝试使用 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
重定向到新位置,因此用户看不到任何差异。