2013-10-03 64 views
2

我正在寫一個應用程序框架,完全平息在應用程序目錄的子目錄中。我們用下面的htaccess的標記來添加我們想要的路徑路由:Apache重寫 - 搜索兩個目錄

RewriteEngine on 
RewriteCond $1 !^(index\.php|robots\.txt|assets) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

正如你所看到的,我們打開了整個資產的文件夾的公共資源,如CSS,JS,圖片等靜態網頁文件。

我們想要做的是有兩個資產文件夾,一個在應用程序目錄中,另一個在框架目錄中。因此,在物理磁盤上,當用戶請求到/assets/*目錄的路由時,應同時搜索/assets/*/framework/assets/*的內容。

簡而言之,我們需要一個與我們的兼容的重寫條件來合併兩個文件夾。 謝謝!

回答

0

你需要填寫的文件/目錄,但試試這個:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*)$ - [L] 

RewriteCond /PhysicalDirectoryPath/%{REQUEST_URI} -f [OR] 
RewriteCond /PhysicalDirectoryPath/%{REQUEST_URI} -d 
RewriteRule ^(.*)$ /WebDirectoryPath/$1 [L] 

RewriteCond %{REQUEST_URI} ^/.*?([^\/]+)$ 
RewriteCond /PhysicalDirectoryPath/%1 -f [OR] 
RewriteCond /PhysicalDirectoryPath/%1 -d 
RewriteRule ^(.*)$ /WebDirectoryPath/$1 [L] 
+0

我看到了另一個答案,它幾乎可以工作,但我不知道如何使它與我原來的規則兼容:( –

+0

以及[L]標誌說,如果規則匹配,將不會處理更多的規則。也許刪除它並測試? –

0

嘗試:

# check if exists in frameowkr/assets 
RewriteCond %{REQUEST_URI} ^/assets/(.*)$ 
RewriteCond %{DOCUMENT_ROOT}/framework/assets/%1 -f 
RewriteRule ^(.*)$ /framework/$1 [L] 

# check if exists in /assets 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^assets/(.*)$ - [L] 
+0

在第4行,它是否意味着是一個RewriteRule?我已經嘗試過兩種方法,但都沒有證明成功。更具體地說,是否將現有的重寫規則應用於其上? (在OP中) –

+0

好的,當我評論我現有的規則時,上面的snippit起作用(與錯字類型一樣)。我怎樣才能使這兩個條件兼容? –

+0

@SpencerSharkey對不起,修正了那種類型。你的'/ index.php'的路由規則需要在條件中包含'framework',並且需要在資產規則之後**。 –

0

試試這個:

RewriteEngine on 

RewriteCond %{REQUEST_URI} !-f 
RewriteCond %{REQUEST_URI} !-d 
RewriteRule /?assets/([^/]+) /framework/assets/$1 [L] 

RewriteCond %{REQUEST_URI} !-f 
RewriteCond %{REQUEST_URI} !-d 
RewriteRule /?framework/assets/([^/]+) /assets/$1 [L]