Nginx try_files配置,并对旧URL进行重定向检查?
我有一个网站,这些年来,它的URL发生了一些重大变化,而且它有大量的反向链接,我希望避免404 基本上,配置需要Nginx try_files配置,并对旧URL进行重定向检查?,nginx,Nginx,我有一个网站,这些年来,它的URL发生了一些重大变化,而且它有大量的反向链接,我希望避免404 基本上,配置需要 检查文件是否存在 如果没有,则检查它是否存在php扩展 还是没有文件?看看我创建的一个php重定向处理程序文件(想象一个大数组检查url的重定向匹配) 还是没有对手?返回带有正确错误页的404 我无法将此链接逻辑用于try\u文件。这是我当前的配置: server { listen 443; server_name www.domain.co.uk; root /var/www/do
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代码>无效,因为命名位置必须是最后一个参数。有关详细信息,请参阅。但无论如何都应该从语句中删除@redirect check
,以执行步骤(2)
语句location@redirect check{try_files@redirector=404;}
只生成404响应。应该删除它
如果您更改请尝试\u files$uri@redirect check
到尝试_文件$uri@redirector代码>您应该接近您的需求
您的/redirection check.php
脚本需要用404响应进行响应,才能继续执行步骤(4)。但您需要在上添加fastcgi\u intercept\u错误
允许error\u页面
指令处理来自PHP脚本的响应代码。有关详细信息,请参阅。感谢@RichardSmith为我指明了正确的方向
以下是我最终得出的效果良好的结论:
location / {
try_files $uri $uri/ @extensionless-php;
}
location @redirector {
rewrite ^(.*)$ /redirection-check?request=$request_uri;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php;
}
在redirection check PHP中,它检查数组是否与$\u GET['request']匹配,如果匹配,则提供相应的301重定向。如果不匹配,则返回404。request=$request\u uri的一个潜在问题是请求uri包含一个查询字符串,因此另一个?
。您可以考虑使用<代码> $yServer [“Realestuuri”] < /COD>而不是<代码> $yGET([请求] ] < /代码>,它可能包含相同的值。