【发布时间】:2021-05-01 04:49:32
【问题描述】:
我在我的应用程序中使用 nodejs/express 视图引擎。这意味着当路由指向一个现有的 url 时,分配的模板将被渲染到屏幕上。每当用户输入不存在的 url 时,我之前已经实现了到主页的重定向。但是,现在,我有一个 wordpress 端点 to/stores,我正在尝试重定向到该端点,而不是我以前拥有的模板。问题是当我点击href链接时,它直接进入主页,因为这次它不是模板,而是路由。所以它不适合“视图引擎”类型的视图。请参阅下面的代码了解我的意思。谢谢!
在 app.js 中,如果存在不存在的路由,我将重定向到主页:
const express = require('express');
const path = require('path');
const router = require('./routes/index');
const morgan = require('morgan');
const ENVIRONMENT = require('./common/config').ENVIRONMENT;
const BASE_URL = require('./common/config').BASE_URL;
const app = express();
app.locals.BASE_URL = BASE_URL;
app.disable('x-powered-by');
app.use(morgan('combined'));
app.use('/', express.static(path.join(__dirname, '../public')))
app.use('/', router);
app.use(function(req, res) {
res.redirect('/');
});
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.listen(3000, () => console.log(`listening in ${ENVIRONMENT} on port 3000!`));
然后在 index.js 文件中,我声明我的路由和将呈现的相应 html 文件。请记住,/stores 路由将是重定向。它之前呈现了一个 html 文件,但现在我希望它重定向到 wordpress 端点 /to/stores 。但是点击href后的结果是进入首页。
/* GET home page. */
router.get('/', function (req, res) {
const agentString = req.get('User-Agent');
const referrer = req.get('Referrer');
if ((referrer && referrer.includes('art.vpn.twttr.com/tweet_review')) || (agentString && agentString.includes('AdsBot'))) {
res.render('bots/honeypot');
} else {
res.render('home', {title: defaultTitle, description: defaultDescription});
}
});
router.get('/reddit', function (req, res) {
res.render('bots/honeypot');
});
router.get('/facebook', function (req, res) {
const clientIps = req.headers['x-forwarded-for'];
const userAgent = req.headers['user-agent'];
if(!clientIps || userAgent.includes('facebookexternalhit')){
res.render('bots/honeypot');
return;
}
const ipMatchCidrs = areIp4sInCidrs(clientIps.split(','), BLACKLISTED_CIDRS);
if (ipMatchCidrs) {
res.render('bots/honeypot');
return
}
const path = req.url.split('?');
const queryString = path.length > 1 ? `?${path[1]}` : '';
res.redirect(301, `/${queryString}`);
});
// THIS IS THE ROUTE THAT I AM TRYING TO DO THE 301 REDIRECT
router.get("/stores", (req, res) => {
res.status(301).redirect("/to/stores")
})
router.get('/institutional', function (req, res) {
res.render('institutional');
});
router.get('/institutional/checkout', function (req, res) {
res.render('institutional-checkout');
});
router.get('/go/:page', function (req, res) {
res.render('lps/' + req.params.page);
});
router.get('/api', function (req, res) {
res.render('api');
});
module.exports = router;
【问题讨论】:
标签: javascript node.js express redirect https-redirect