我最近设置了 NGINX,并且必须实施各种重定向来管理我们旧网站的页面,这些页面仍在 Google 中返回点击量(以及其他各种链接页面)。
我们必须将其中一些链接重定向到明确的位置,但其余链接应重定向到根目录 /。
我被要求将任何 404、500 和 501 页面重定向回根目录。我认为这使用指令很容易实现error_page
。我的服务器块包含以下内容
error_page 404 500 501 = @redir;
location @redir
{
rewrite .* / redirect;
}
当我请求随机不存在的文件时,在我的日志文件中我看到以下内容
x.x.x.x - - [02/Mar/2012:11:25:42 +0000] "GET /fgfg.jpg HTTP/1.1" 500 799 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.46 Safari/535.11"
这又引出了两个问题:
- 为什么返回 500 错误而不是 404 错误?
- 为什么 500 重定向没有由该
error_page
部分处理?
这是整个服务器块
server
{
listen x.x.x.x:80;
server_name www.blah.com;
access_log /var/www/www.blah.com/log/access.log;
error_log /var/www/www.blah.com/log/error.log;
root /var/www/www.blah.com/public;
passenger_enabled on;
error_page 404 500 501 = @redir;
location @redir
{
rewrite .* / redirect;
}
location ~* "/Managed Services"
{
rewrite .* /managed_services permanent;
}
location ~* /solutions_arch.asp
{
rewrite .* /arch permanent;
}
location ~* .*\.(php|asp)$
{
rewrite .* / permanent;
}
}
有任何想法吗?
答案1
我可以回答我的第一个问题
It turns out the reason this wasn't working was because the requests were being passed through to rails and then the default controller was returning an error 500 because the view/page didn't exist!
我仍然不知道为什么 NGINX 没有检测到 500 错误。我确实注意到 500 错误仍然返回默认的 500.html 页面。为了解决这个问题,我刚刚进行了一次元刷新,虽然很丑陋,但目前可以正常工作。
理想情况下,我希望有一个正确的重定向。