相当于这个.htaccess的nodejs
是否有可能在node.js
构build这样的代码?
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond% {REQUEST_URI}! / (View) / [NC] RewriteCond% {REQUEST_FILENAME}!-F RewriteRule ^ (. *) $ Index.html [L, QSA] </IfModule>
url显示的path不是“view”,也是不存在的文件,然后写index.html
。
使用类似express
或connect
东西
更新:我需要一个正则expression式!/(view)/
在路由中的express
在node.js
你有没有尝试过:
- 为静态服务
- 捕获/查看url
-
抓住一切
app.configure(function(){ app.use(express.static(__dirname+'/public')); // Catch static files app.use(app.routes); }); // Catch /view and do whatever you like app.all('/view', function(req, res) { }); // Catch everything else and redirect to /index.html // Of course you could send the file's content with fs.readFile to avoid // using redirects app.all('*', function(req, res) { res.redirect('/index.html'); });
要么
- 为静态服务
-
检查URL是否为/ view
app.configure(function(){ app.use(express.static(__dirname+'/public')); // Catch static files app.use(function(req, res, next) { if (req.url == '/view') { next(); } else { res.redirect('/index.html'); } }); });
要么
- 像平常一样捕捉静力
-
赶上NOT /查看
app.configure(function(){ app.use(express.static(__dirname+'/public')); // Catch static files app.use(app.routes); }); app.get(/^(?!\/view$).*$/, function(req, res) { res.redirect('/index.html'); });
最后的结构是:
var express = require('express'), url = require('url'); var app = express(); app.use(function(req, res, next) { console.log('%s %s', req.method, req.url); next(); }); app.configure(function() { var pub_dir = __dirname + '/public'; app.set('port', process.env.PORT || 8080); app.engine('.html', require('ejs').__express); app.set('views', __dirname + '/views'); app.set('view engine', 'html'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(express.static(pub_dir)); app.use(app.router); }); app.get('/*', function(req, res) { if (req.xhr) { var pathname = url.parse(req.url).pathname; res.sendfile('index.html', {root: __dirname + '/public' + pathname}); } else { res.render('index'); } }); app.listen(app.get('port'));
感谢大家。 PD:使用模块ejs呈现html