2016-11-14 15 views
0

我們正在將我們可怕的傳統PHP應用程序遷移到PHRoute--它由大約一兩千個頂級腳本組成。我們刺激了一些孤立的頁面,但現在我正試圖將其與整個系統集成。如何獲得RewriteCond標誌「-f」來識別已重寫的文件?

我使用以下重寫規則來排除現有文件和目錄被重新路由,因此它不嘗試路由任何現有的頂級腳本。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?path=$1 [NC,L,QSA] 

這工作正常但有一個例外:多租戶/定製品牌的原因,我們必須重新編寫類似的標誌,CSS等的路由器重寫規則的條件不接我們的客戶特定文件的規則重新編寫客戶端文件,因此它會嘗試重新路由,例如,它應該將其重寫爲/clients/[client]/css/theme.css並完全跳過路由器,例如static/theme.css

如何我可以調整上述規則拿起重寫文件作爲一個「真實」的文件(-f)?

回答

0

原來我錯過了,而不是重寫一個(/clients/[client]/css/theme.css)從客戶特定文件重寫,這意味着路由器規則對原來的URL(static/theme.css)運行[L][last]標誌。

添加L標誌意味着它現在立即處理客戶端重寫而不是等到結束。所以當它到達路由器重寫它現在檢查真正的文件位置,從而成功識別真實的文件。

來源:https://httpd.apache.org/docs/current/rewrite/flags.html#flag_l