我必须按照代码将非www请求重定向到节点服务器上的www:
app.get('/*', function(req, res, next) {
if (req.headers.host.match(/^www/) === null ) res.redirect('https://www.' +
req.headers.host + req.url, 301);
else next();
});
但如果用户输入foo.com,则不会将其重定向到www.foo.com。相反,如果foo.com被刷新,那么它被重定向到www.foo.com
我也试过了ForceDomain,但问题仍然存在。我有什么不对的吗?
以下是整个代码:
var express=require('express');
var httpsRedirect = require('express-https-redirect');
path=require('path');
bodyParser=require('body-parser');
cors=require('cors');
passport=require('passport');
mongoose=require('mongoose');
config=require('./config/database');
app=express();
app.use('/', httpsRedirect());
port=3700;
app.use(cors());
app.use(bodyParser.json());
app.use(passport.initialize());
app.use(passport.session());
require('./config/passport')(passport);
var users=require('./routes/users');
admin=require('./routes/admin');
app.use('/users',users);
app.use('/admin',admin);
app.use(express.static(path.join(__dirname,'public')));
app.listen(port,function(){console.log('Server logged on '+port)});
mongoose.connect(config.database);
mongoose.connection.on('connected',function(){
});
mongoose.connection.on('error',function(a){
a&&console.log('Error'+a)
});
// Forcedomain to www
app.get('/*', function(req, res, next) {
if (req.headers.host.match(/^www/) === null ) res.redirect('https://www.' + req.headers.host + req.url, 301);
else next();
});
app.get('*',function(a,b){
b.sendFile(path.join(__dirname + '/public/index.html'))
});
答案 0 :(得分:0)
我刚刚发现了我做错了什么。我已经使用'express-https-redirect'从http重定向到https,然后尝试将非www重定向到www。显然,我必须同时做两件事。所以我删除了express-https-redirect,并使用ForceDomain重定向到https和www版本。现在它有效。