我已经尝试了一段时间来解决这个问题,似乎无法使其发挥作用。我有一个仅适用于https的网站,我希望通过http访问域的所有请求都转发到网站的https版本。这是我的快速服务器文件的片段(当我在生产中运行它时,我传入-p标志,所以在这种情况下它将进入第一个if语句):
const app = express();
app.use(express.static('../client'));
app.get('/', function (req, res) {
res.sendFile(__dirname + '../client/index.html');
});
if (process.argv.indexOf("-p") != -1) {
http.createServer((req, res) => {
res.writeHead(301, { Location: `https://gameof.ninja` })
res.end()
}).listen(80);
const options = {
key: fs.readFileSync('/etc/letsencrypt/live/gameof.ninja/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/gameof.ninja/fullchain.pem')
};
server = https.createServer(options, (req, res) => {
res.writeHead(200)
res.end('Works!')
}).listen(443);
wss = new WebSocket.Server({server: server});
console.log('listening prod.')
} else {
server = http.createServer(app).listen(8889);
wss = new WebSocket.Server({server: server});
console.log('listening dev.')
}
我的webapp的域名是“gameof.ninja”,但现在的问题是,当我最初转到“http://gameof.ninja”时,它不会自动转发到https版本。相反,它只是超时而且什么都不做。奇怪的是,我第二次尝试请求网站的http版本时,它确实正确地转发到“https://gameof.ninja”。我也尝试使用库“express-force-ssl”和“express-http-to-https”,但没有成功。当我第一次在地址栏中输入http版本时,请帮我立即转发到https。谢谢!