我有一个带有react-snap的react应用程序,可以在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放大器上。对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都有一个试验斜杠,而awsmplify缺少它吗?
我尝试了几种不同的配置,并且如果我在源代码中添加了一个
/</^[^.]+$|\\\\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>
社交爬虫正常工作,并且页面上还出现了缺少的尾部斜杠,但某些页面(例如404)在导航栏上没有路线链接:
Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>XXXXXXX</RequestId>
<HostId>XXXXXXXXXXXXXX</HostId>
</Error>
有人能与AWS Amplify合作吗?我不熟悉重写规则,因此不胜感激。
这是我的构建文件在放大时的外观:
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"
},