2015-01-20 21 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