我们的网站基于 Angular,这使得它几乎完全基于 JavaScript,因此我们需要向 Googlebot 提供静态 HTML 快照,以便它抓取我们。目前,我们有以下实现:
location / {
# Rewrite rules for the Google and Bing bots and other crawlers.
# Serves static HTML from /snapshots when a URL is requested
if ($http_user_agent ~ (Googlebot|bingbot|Screaming)) {
rewrite ^/(.*)$ /snapshots/$1.html break;
}
}
这在大多数情况下都有效,但是如果 Google 请求这样的 URL:http://site.com/support/contact/
它将被重写为:http://site.com/support/contact/.html
这显然会返回 404。我需要更改配置以删除 URL 末尾的正斜杠,以确保返回以下内容:http://site.com/support/contact.html
如何在 nginx 配置中实现这一点?由于这个原因,我们在网站管理员工具中看到了数百个 404 错误。
谢谢!
答案1
如果你将重写内容更改为
rewrite ^/(.*)/$ /snapshots/$1.html break;
rewrite ^/(.*)$ /snapshots/$1.html break;
那么第一行将仅匹配以斜杠结尾的行,并将$1
包含完整路径减去前斜杠和尾斜杠。第二行将捕获其余的情况(目前正在运行)。