我一直試圖弄清楚這一點。我很抱歉,如果這是一個重複的問題,但我似乎無法找到合適的解決方案。Apache Mod_rewrite改變目錄
我試圖做到的是以下幾點:
給出的URL dev-<sub>.example.com/resources/path/to/resource
,其中sub
變化,去/var/www/devEx_<sub>/override/resources/path/to/resource
,如果它產生一個文件或/var/www/devEx_<sub>/main/resources/path/to/resource
以其他方式(我可以處理404)。
我可以找出一個解決方案,我手動添加每個人sub
但我無法弄清楚如何使用通配符或反向引用。
我試過搞VirtualDocumentRoot
,但我永遠不會得到devEx_<sub>
部分顯示在DOCUMENT_ROOT
檢查資源。
我嘗試使用類似於此[mod_rewrite regex (too many redirects)]的解決方案,但它總是與REQUEST_URI
混淆。
我使用這樣的事情在過去的嘗試:
RewriteCond $1 (^resources/.*)
RewriteCond %{DOCUMENT_ROOT}/override%{REQUEST_URI} -f
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/override%{REQUEST_URI} [QSA,L]
RewriteCond $1 (^resources/.*)
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/main%{REQUEST_URI} [QSA,L]
而且,我更喜歡使用Apache/mod_rewrite的更多可以這麼理解,如果你有一個良好的技術指導或指南建議,會幫助我使用這個或一些調試技術(因爲我不知道如何調試這些重寫規則),我非常感謝所有知識,所以請分享!
編輯
關於我的考驗更多的細節。
在我的VirtualDocumentRoot
解決方案中,我能夠路由到正確的目錄,但無法將目錄設置爲文檔根目錄以執行覆蓋規則。
對於這種溶液[mod_rewrite regex (too many redirects)],我在conf設置DocumentRoot
爲/var/www
和放置在下面的行中的.htaccess
文件在目錄
RewriteCond %{HTTP_HOST} ^dev-([^.]+)\.example\.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/devEx_%1 -d
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule .* /devEx_%1/$0 [L]
然而,該附加devEx_<sub>
到%{REQUEST_URI}
,如你會期待的。
這些規則似乎是在正確的方向 - 他們不工作? – Ansari
您不希望'%{DOCUMENT_ROOT}/path1%{REQUEST_URI}'爲'%{DOCUMENT_ROOT}/override%{REQUEST_URI}'? –
@Jon編輯翻譯錯誤。 – sgcharlie