Apache的重写规则的Node.js版本

时间:2016-04-21 17:46:37

标签: javascript node.js apache mod-rewrite express

我正在将一个使用Apache的PHP应用程序移动到Node.js应用程序。 PHP版本使用tileservices.conf,一个Apache配置文件。我需要将configuartion设置从该文件移动到应用程序的Node.js版本。该配置文件的一部分如下:

RewriteEngine on
RewriteRule ^/1.0.0/([a-zA-Z0-9]*)/([0-9]*)/([0-9]*)/([0-9]*)\.[a-zA-Z]*$ /sandbox/TileServices/tiles/tc/cache_server.php?z=$2&c=$3&r=$4&cache=$1
RewriteRule ^/nwomtest/1.0.0/(.+)/(.+)/(.+)/(.+)\.[a-zA-Z]*$ /sandbox/TileServices/www/tc/cache_server_new.php?z=$2&c=$3&r=$4&cache=$1
RewriteRule ^/nocache/nwomtest/1.0.0/(.+)/(.+)/(.+)/(.+)$ /sandbox/TileServices/www/tc/cache_server_new.php?z=$2&c=$3&r=$4&cache=$1&do_not_cache=nocache
RewriteRule ^/nocache/nwomtest/1.0.0/(.+)/(.+)/(.+)/(.+)\.[a-zA-Z]*$ /sandbox/TileServices/www/tc/cache_server_new.php?z=$2&c=$3&r=$4&cache=$1&do_not_cache=nocache

RewriteRule ^/oms/1.0.0/(.+)/(.+)/(.+)/(.+)\.[a-zA-Z]*$ /sandbox/TileServices/www/MosaicRequestHandler.php?z=$2&c=$3&r=$4&library=$1&filestyle=strip
RewriteRule ^/omb/1.0.0/(.+)/(.+)/(.+)/(.+)\.[a-zA-Z]*$ /sandbox/TileServices/www/MosaicRequestHandler.php?z=$2&c=$3&r=$4&library=$1&filestyle=block
RewriteRule ^/ms/1.0.0/(.+)/(.+)/(.+)/(.+)/(.+)\.[a-zA-Z]*$ /sandbox/TileServices/www/Mosaic/Mosaic.php?z=$3&c=$4&r=$5&resource=$1&tkid=$2&filestyle=strip
RewriteRule ^/mb/1.0.0/(.+)/(.+)/(.+)/(.+)/(.+)\.[a-zA-Z]*$ /sandbox/TileServices/www/Mosaic/Mosaic.php?z=$3&c=$4&r=$5&resource=$1&tkid=$2&filestyle=block

我如何将其移动到Node.js应用程序中?我正在使用Express,所以我可以按照以下方式执行操作:

app.get( 'regexstring', function(req, res){
    res.render(...)
}); 

但我无法弄清楚如何去做。

1 个答案:

答案 0 :(得分:0)

您可以使用一些重定向到适当端点的中间件:

app.use('*', function(req, res, next) {
  var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;

  if(someUrlRegex.test(fullUrl)) {
    res.redirect('someOtherUrl');
  }

  // etc.
});

基本上,你只是让应用程序使用这个"中间件"对于每个路由,您可以测试传入的URL并将其重定向到正确的URL。

如果您要使用此中间件,请确保在路由定义之前调用它。

(仅供参考,获取完整的网址取自this answer)。