因此,我正在一个需要以下路径链接的网站上工作:
localhost:3000/visit/:name
要重定向到外部网址,例如google.com?affiliateID=2。重定向需要为nofollow,状态代码为307。
该应用程序是通用的;使用express& amp;服务器端渲染客户端做出反应,都是通过react-router使用共享路由。
routes.js
<Route status={307} path="visit/:slug" />
server.js
app.use((req, res) => {
match({routes, location: req.originalUrl}, (err, redirectLocation, renderProps) => {
if (err) {
res.status(500).send(err.message)
} else if (redirectLocation) {
res.redirect(302, redirectLocation.pathname + redirectLocation.search)
} else if (renderProps) {
const html = renderToString(<RouterContext {...renderProps} />)
const isAffiliateLink = renderProps.routes.filter((route) => {
return route.status === 307
}).length > 0
if (isAffiliateLink) {
return res.redirect(307, "http://google.com")
}
const markup = renderToStaticMarkup(<Document html={html} />)
res.status(200).send("<!DOCTYPE html>" + markup)
} else {
res.status(404).send("Not Found")
}
})
})
这里我通过检查状态307来检查所请求的路由是否是/ visit / slug。如果是这种情况,它将重定向到目的地。这很有效。
我现在面临的困难是,我有数百个联盟链接,不同的网址,每个都有相应的slug。
以编程方式为正确的slug输入正确的url的最佳方法是什么? 在路线我可以给一个道具
<Route path="/visit/:slug" url="url.com" />
我可以从server.js访问,但我不知道如何使那个动态取决于slug。
或者我应该对server.js上的数据库进行API调用,该数据库包含所有slug及其相应的URL?
或者有没有办法可以从用于点击链接的组件中将道具传递给路径?即
<AffiliateLink slug={slug} url={url} />
非常感谢任何帮助