2016-03-03 24 views
0

我正在開發一個單頁應用程序,我將各種模塊負載推送到URL作爲路徑。我們有內置的處理程序來改變內部參數的路徑。.htaccess用於路由單頁應用程序

但是爲了使它具有可收藏性,我們必須使用.htaccess來管理路徑。

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteRule ^applications/sample([/]+[a-z]+)+$ applications/sample/index.html [L] 
</IfModule> 

現在,這是工作,直到第一級....

applications/sample/module加載罰款....但

applications/sample/module/submodule是不工作...

我在哪裏用RewriteRule出錯了?我要尋找以下規則....

<rule> 
    <note>Rewrite sample/module1, sample/module2, ... sample/moduleX to /sample/index.html and sub-modules as well</note> 
    <from>/sample/(home|book|table|...|module)(.*)</from> 
    <to>/sample/index.html</to> 
</rule> 
+0

描述「不工作」。你的正則表達式不是最優的(例如它允許多個斜槓),但是它應該與給定的URL匹配。也許你的「真實」網址有不同之處? – MrWhite

+0

@ w3dk我已經更新了這個問題,如果有幫助...不工作意味着index.html似乎加載,因爲沒有服務器錯誤...但js,css文件等得到404 –

+0

因此,你有代碼張貼「正在工作」,但你沒有得到理想的結果。這聽起來好像你正在使用相對URL到你的JS/CSS資源?這些資源在哪裏?他們是否也被重寫? – MrWhite

回答

1

其工作sample/module第一路徑,而是爲了sample/module/sub-module其不工作...的CSS js文件都扔404

如果您在客戶端HTML中使用相對URL來連接外部資源(JS,CSS和圖像),可能會發生這種情況。由於第二個URL實際上位於(虛擬)「子目錄」中,所以任何相對客戶端URL都與該「子目錄」相關,而不是父目錄,因爲它與第一個URL相關。

見我的回答對專業網絡管理者更多的細節:
.htaccess rewrite url leads to missing css


相反,如果該鏈接的外部資源(即JS和CSS文件。)正在被改寫,那麼你可以通過添加一些防止這種條件/異常。要訪問靜態資源時(物理文件上的文件系統)排除rewritting:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^applications/sample(/[a-z]+)+$ applications/sample/index.html [L] 

我還調整了RewriteRule正則表達式,以防止多個斜線被接受。 (我假設你不需要去掉多個斜槓?)

+0

不,這個問題是不是與我想的js,CSS。 '.htaccess'中的正則表達式沒有完全選擇路徑。它只通過'sub-module'到index.html,而它應該通過'module/sub-module' –

+0

我不確定你的意思。如果JS和CSS文件(靜態資源)也被重寫,那麼只需重寫未映射到文件系統資源的URL即可省略它們。我已經更新了我的答案。 – MrWhite

+0

.htaccess指令不是「傳遞」任何東西。你在評論中說,「index.html好像被加載,因爲沒有服務器錯誤」 - 所以重寫按預期工作。其餘的則由您的「內置處理程序來改變內部參數路徑」。你的JS和CSS文件的HTML中的URL是什麼?要求哪些JS和CSS URL生成404? – MrWhite