我有一个带有 react-snap 的反应应用程序,可以在 ec2 实例上正常工作。
实例上的 nginx 配置看起来像
server {
root /var/www/xxx.yyy.com;
index index.html index.htm index.nginx-debian.html;
server_name xxx.yyy.com www.xxx.yyy.com;
location / {
try_files $uri $uri/ /200.html$is_args$args;
}
}
我最近将所有内容移植到 aws amplify。使用 SPA 的默认重写规则,所有页面都可以正常加载,但社交爬虫无法爬取页面以获取元信息。
AWS 为 SPA 放大默认重定向和重写规则
[
{
"source": "</^[^.]+$|\\\\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>",
"target": "/200.html",
"status": "200",
"condition": null
}
]
我还注意到,在 ec2 实例上,所有 url 都有一个试用斜线,而它在 aws amplify 中丢失了?
我尝试了几种不同的配置,如果我在源代码中添加 /
/</^[^.]+$|\\\\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>
社交爬虫工作,缺少的斜杠也出现在页面上,但某些页面(如 404)在导航栏上没有 Route 链接抛出:
Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>XXXXXXX</RequestId>
<HostId>XXXXXXXXXXXXXX</HostId>
</Error>
有人使用 AWS 放大进行 react-snap 吗?我不精通重写规则,所以任何帮助表示赞赏。
这是我的构建文件在放大时的样子:
version: 1
frontend:
phases:
preBuild:
commands:
- '# This installs Chrome on any RHEL/CentOS/Amazon Linux variant.'
- curl https://intoli.com/install-google-chrome.sh | bash
- npm ci
build:
commands:
- npm run build
postbuild:
commands:
- react-snap
artifacts:
baseDirectory: build
files:
- '**/*'
cache:
paths:
- node_modules/**/*
- /opt/google/**/*
在 Package.json 我有
"reactSnap": {
"puppeteerArgs": [
"--no-sandbox",
"--disable-setuid-sandbox"
],
"puppeteerExecutablePath": "/opt/google/chrome/google-chrome"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"postbuild": "react-snap"
},