2012-02-03 41 views
7

我服靜態目錄,如下所示:重定向非www到www用的Node.js和快速

var app = express.createServer(); 
app.configure(function(){ 
    app.use(express.static(__dirname + '/public')); 
}); 

所以我不使用航線的。我想將example.com重定向到www.example.com,可以使用Express嗎?

+0

雖然你可以證明只需在應用層使用Express即可完成此操作,在大多數情況下,您可能希望讓Web服務器處理此問題。這將有助於保持應用程序的負載,當它不需要在那裏時。 – Brad 2015-01-20 04:46:40

+0

另請參閱http://stackoverflow.com/questions/7013098/node-js-www-non-www-redirection – 2015-09-21 15:13:29

+0

希望這個https://stackoverflow.com/a/39731460/1946016爲你工作,如果是這樣,請接受答案 – karthikdivi 2017-11-09 09:57:39

回答

9

是的。這應該做到這一點。

var express = require("express"); 
var app = express.createServer(); 
var port = 9090; 
app.all(/.*/, function(req, res, next) { 
    var host = req.header("host"); 
    if (host.match(/^www\..*/i)) { 
    next(); 
    } else { 
    res.redirect(301, "http://www." + host); 
    } 
}); 
app.use(express.static(__dirname + "/public")); 
app.listen(port); 
+0

你不需要重定向到9090端口嗎? – chovy 2012-10-05 08:02:46

+0

你需要反轉你的res.redirect參數。 – chovy 2012-10-05 08:18:40

+0

對於express 2.x,它是'res.redirect = function(url,status){'。它已在3.x中更改爲交換訂單。我會更新這個例子。通常有一個Web服務器監聽端口80,並反向代理以在不同的端口上進行表示(本例中爲9090),所以你不想在你的URL中包含9090端口。如果express是直接向互聯網提供服務,那麼如果您不使用默認端口,則您需要端口。 – 2012-10-05 14:14:14

8

或者,您可以使用現成的快速模塊來完成您想要的功能,例如,節點力域。

查看https://github.com/goloroden/node-force-domain瞭解詳情。

+0

我發現這個插件不能與端口和http工作 – chovy 2012-10-05 08:02:16

+0

讓我們繼續在GitHub上討論這個問題,我看到你打開了[問題](https://github.com/goloroden/node-force-domain/issues/1 )爲:-) – 2012-10-05 13:56:16

+1

感謝這個模塊Golo。對我來說,谷歌分析經常抱怨「Reduntdant主機名 - 爲了避免這個問題,考慮設置一個301重定向從一個冗餘的主機名到另一個,或者創建一個搜索和替換過濾器,從主機名剝去」www。「 「。你的模塊完美地解決了它。 {{moderators谷歌分析的消息有意添加在這裏,它將幫助同行代碼輕鬆找到這個線程}} – 2015-04-18 02:25:03

2

可以使用快遞力域包從NPM:在NPM

//install 
npm install express-force-domain 

///app.js 
app.all('*', require('./express-force-domain')('http://www.example.com')); 

套餐:https://npmjs.org/package/express-force-domain

+0

此解決方案非常有效好吧,即使是http到https – 2018-01-22 19:35:36

7

下面的代碼保存路徑,同時重定向

例:http://foo.com/foohttp://www.foo.com/foo

var app = express.createServer(); 
    self.app.all(/.*/, function(req, res, next) { 
     var host = req.header("host"); 
     if (host.match(/^www\..*/i)) { 
     next(); 
     } else { 
     res.redirect(301, "http://www." + host + req.url); 
     } 
    }); 
    app.use('/',express.static('public'));