2011-11-29 73 views
0

的設置阿帕奇重寫規則不希望適用於不同的目錄

我的設置是有有雖然不同的內容類似結構的兩個或多個站點共享資源。在示例中...

http:// localhost/site1/ 
http:// localhost/site2/ 

重寫規則旨在爲共享資源添加例外。在示例腳本文件夾(和它裏面當然一切)被改寫所以...

http:// localhost/scripts/ 

...是...訪問

http:// localhost/site1/scripts/ 
http:// localhost/site2/scripts/ 

的問題

當試圖訪問...

http:// localhost/site1/scripts/admin.js 

...下面再通過寫入當前的規則適用,並試圖將其改寫爲admin目錄...

RewriteEngine on 
RewriteRule .*/admin(.+) admin$1 [QSA] #Messes with scripts/admin.js 

我認爲這是一個目錄深度的問題,治所在。* /可應用於多個第一目錄(SITE1 /),並且固有地(並且不希望地)適用於所有目錄深度(例如,深度1 /深度2 /深度3 /等)。

期望的結果

如何調整這個規則,使...

  1. 管理指數(SITE1 /管理/)此規則caputed。
  2. 此規則忽略管理JavaScript文件(site1/scripts/admin.js)。
  3. 我們保留規則(RewriteRule。*/admin)的動態起始位,所以無論使用的目錄名稱是否會繼續自動工作我們可以修改它以獲得相同的效果,但最終的結果是它必須保持動態。
  4. 我不重命名admin.js,因爲它會便宜,因此我不會從中學習。
+0

我已經閱讀了這個問題,我不明白你想達到什麼目的。請舉出一些應該重寫的東西(以及它們應該成爲的東西)以及不應該被重寫的東西。 –

+0

localhost/site1/example.js被重寫爲localhost/scripts/example.js(正確) – John

+0

localhost/site1/admin.js被post中的規則捕獲並拋出一個HTTP 404.我認爲是因爲。* /可能適用於TWO目錄深度而不是隻有一個目錄深度。我們可以限制規則的目錄深度嗎? – John

回答

1

你可以嘗試一些事情,具體取決於你如何工作。如果SITE1 /腳本/ admin.js存在,你想擁有的URI訪問現有的文件(如腳本或圖像)不被改寫,你可以嘗試重寫規則之前加入這一權利:

RewriteCond %{REQUEST_FILENAME} !-f 

或者,你也可以只讓這樣的腳本將無法獲得通過重寫規則之前加入這一權利改寫:

RewriteCond %{REQUEST_URI} !\.js$ 

請處理的.js最終將失敗,該條件和規則將不會被應用。或者,您可以將其縮小爲admin\.jsscripts/[^\.]+\.js(在條件中替換\.js)。


我們可以限制則該規則的目錄深度?

你可以,如果你使用[^/]+而不是.*

+0

RewriteCond%{REQUEST_URI}!\。js $工作,謝謝。如果您或其他人願意貢獻,我仍然願意接受目錄深度限制;我們有更多的工作代碼,這更有可能幫助其他人。 – John