Nginx try_files配置重定向检查旧URL?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx try_files配置重定向检查旧URL?相关的知识,希望对你有一定的参考价值。

我有一个网站,这些年来有一些重要的URL更改,它有大量的反向链接在网络上踢,我想避免404s。

基本上配置需要......

  1. 检查文件是否存在
  2. 如果没有,那么检查它是否存在与php扩展
  3. 还是没有档案?看看我创建的php重定向处理程序文件(想象一个检查重定向匹配的url的大数组)。
  4. 还是没有比赛?使用正确的错误页面返回404。

我无法使用这个链式逻辑来使用try_files。这是我当前的配置:

server {
listen 443;
server_name www.domain.co.uk;
root /var/www/domain.co.uk;
default_type text/html;
index index.php;

ssl on;
ssl_certificate /etc/ssl/certs/domain.co.uk.crt;
ssl_certificate_key /etc/ssl/private/domain.co.uk.key;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_prefer_server_ciphers on;

location / {
    try_files $uri $uri/ @extensionless-php @redirect-check;
}

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

location @redirect-check {
    try_files @redirector =404;
}

location @redirector {
    rewrite ^(.*)$ /redirection-check?request=$request_uri;
}

location ~ .php$ {
    try_files $uri @redirect-check;
    fastcgi_split_path_info ^(.+.php)(/.+)$;
    fastcgi_pass unix:/run/php/php5.6-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include fastcgi_params;
}

error_page  400 402 403 404 500 502 503 504 /error?error_type=$status;

}

任何帮助将非常感谢!

答案

语句try_files $uri $uri/ @extensionless-php @redirect-check;无效,因为命名位置必须是最后一个参数。有关详细信息,请参阅this document。但是无论如何都应该从声明中删除@redirect-check,以执行步骤(2)。

声明location @redirect-check { try_files @redirector =404; }除了生成404响应之外什么都不做。它应该被删除。

如果你将try_files $uri @redirect-check;改为try_files $uri @redirector;,你应该接近你的要求。

您的/redirection-check.php脚本需要响应404响应才能继续执行步骤(4)。但是您需要添加fastcgi_intercept_errors on;以允许error_page指令处理PHP脚本中的响应代码。有关详细信息,请参阅this document

另一答案

所有归功于@RichardSmith都指出了我正确的方向。

这就是我最终得到的结果:

location / {
    try_files $uri $uri/ @extensionless-php;
}

location @redirector {
    rewrite ^(.*)$ /redirection-check?request=$request_uri;
}

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

在重定向检查PHP中,它检查数组是否在$ _GET ['request']上匹配,如果匹配,则提供适当的301重定向。如果不匹配则返回404。

以上是关于Nginx try_files配置重定向检查旧URL?的主要内容,如果未能解决你的问题,请参考以下文章

Web架构之Nginx try_files

[Linux] Nginx 提供静态内容和优化积压队列

Nginx 配置旧域名重定向到新域名

nginx "try_files" 中的级联 index.php

nginx 域名重定向

nginx 指令之 try_files