2015-01-20 60 views
0

在那我的工作一个Web应用程序,我有处理类似下面的网址:咕噜:有一段位置URL应用

http://localhost:8080/section/value.with.periods

value.with.periods是一个URL PARAM,像那些声明对角的routeProvider

angular.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider 
     .when('/section/:param', { 
      templateUrl: 'url-to-template', 
      controller: 'ExampleCtrl', 
      resolve: { 
       ... 
      } 
     }); 
}]); 

的问题是,使用的服务器,在咕噜任务运行,不能处理期间的URL在它:

Cannot GET /section/value.with.periods

我与grunt-contrib-proxyconnect-modrewrite,以及livereload任务,其配置connect-modrewrite,运行格朗特低于一个:

 livereload: { 
      options: { 
       open: 'http://localhost:<%= connect.options.port %>', 
       base: [ 
        '.tmp', 
        '<%= config.app %>' 
       ], 
       middleware: function(connect, options) { 
        if (!Array.isArray(options.base)) { 
         options.base = [options.base]; 
        } 

        // Setup the proxy 
        var middlewares = [proxySnippet]; 

        var modRewrite = require('connect-modrewrite'); 
        middlewares.push(modRewrite(['^[^\\.]*$ /index.html [L]'])); 
        // middlewares.push(modRewrite(['!\\.html|\\.js|\\.svg|\\.css|\\.png|\\.jpg\\.gif|\\swf$ /index.html [L]'])); 


        // Serve static files. 
        options.base.forEach(function(base) { 
         middlewares.push(connect.static(base)); 
        }); 

        // Make directory browse-able. 
        var directory = options.directory || options.base[options.base.length - 1]; 
        middlewares.push(connect.directory(directory)); 

        return middlewares; 
       } 
      } 
     } 

我需要能够处理与时间的网址在Angular上使用的参数。任何帮助将不胜感激。

谢谢。

回答

2

您重写正则表达式排除有一段时间的所有路径它:

^[^\\.]*$ 

这意味着高达:与所有字符匹配的网址,除非他们有一个反斜杠或周期。所以/section/value.with.periods将被忽略。

您应该将正则表达式改变的东西更宽容:

middlewares.push(modRewrite(['^(.*)$ /index.html [L]'])); 

,你应该是好去。

编辑解决方案:

在我们来到了答案的评论:上述正则表达式将会重写所有的网址index.html的,造成的其他文件无法送达。有一个注释掉的行,只重写具有未知文件扩展名的网址:

middlewares.push(modRewrite(['!\\.html|\\.js|\\.svg|\\.css|\\.png|\\.jpg|\\.gif|\\.swf$ /index.html [L]'])); 

这给出了预期的结果。查看评论以获取更多信息。

+0

我用你的建议替换了正则表达式,应用程序无法找到它的任何依赖关系。他们现在都指向'index.html'作为源代码,在控制台上抛出了一些错误。我在想,如果这个原始的正则表达式应该被修改,或者它只适用于HTML标记声明的文件路径。 – 2015-01-21 00:26:24

+1

似乎没有选项来检查文件是否存在,如在apache的mod_rewrite中。你有没有试过注释掉的版本? 'middlewares.push(modRewrite(['\\ HTML |!\\ JS |。\\ SVG | \\ CSS | \\ PNG |。\\ \\ JPG GIF | \\ SWF $ /指数.html [L]']));' – RoryKoehein 2015-01-21 11:56:51

+0

正则表达式不是我最好的能力。是的,取消评论的工作。我没有注意到没有注释的正则表达式的可能性,团队中的某个人已经替换了另一个并导致这个问题。我可以编辑您的答案,解释并标记为正确吗? – 2015-01-21 15:51:51