.htaccess表达路线

时间:2016-06-23 20:39:02

标签: node.js apache .htaccess

我正在从apache2迁移到nodejs express服务器。在这个过程中,我现在需要将.htaccess转换为expressjs路由,但我无法弄清楚如何实现这一点。

这里是.htaccess文件:

RewriteEngine On

#Remove .html from urls
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

# Is it a file? serve it, is it not a file? serve index.html
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]

基本上,它为浏览器提供所有文件。如果请求的路径不是文件,则它为index.html提供服务。这些在expressjs路线中会是什么样子?

目前,路线是这样的

var express = require('express');
var app = express();
var path = require('path');
app.use(express.static("public"));

app.get('*', function (req, res) {
  res.sendFile('index.html',{root: path.join(__dirname, './public')});
});

app.listen(80, function () {
  console.log('Example app listening on port 3000!');
});

1 个答案:

答案 0 :(得分:1)

如果您使用expressjs static method默认设置,则无需添加任何其他内容,因为此规则已应用。有关更多信息,请参阅Serving static files in Express。另外,为了没有html扩展名的服务器文件,你需要遵循中间件。

var fs = require('fs');

function(req, res, next){
  var file = path.join(path.join(__dirname, './public'), req.path + '.html';

  fs.exist(file), function(exist){
      if(!exist) return next();

      res.sendFile(file);
    }
  );
}