我想爲多個子域與我的web服務器:重新映射請求不同的本地路徑
example.com
projects.example.com
blog.example.com
wiki.example.com
...
文檔根目錄被設置如下:
ServerName example.com
ServerAlias *.example.com
VirtualDocumentRoot "/var/www/%0/public"
該W因爲它會自動將文檔根設置爲相應的子域。然而,我的下一個要求是,它應該檢測文檔根目錄中的public
文件夾是否存在,如果不存在,則提前從一個目錄提供文件。
我的大多數應用程序都是用Laravel編寫的,所以他們附帶一個public
文件夾,但有時我只想快速創建一個沒有public
的新腳本,或部署不支持的外部軟件。
因此的文檔根目錄example.com
(這只是提供一個靜態index.html
和style.css
)應/var/www/example.com/
而非/var/www/example.com/public
。
<If "!-d '/var/www/' . %{HTTP_HOST} . '/public'">
RewriteEngine on
RewriteRule^"/var/www/%{HTTP_HOST}" [L,QSA]
</If>
這是改寫錯誤日誌的結果:
[rewrite:trace2] [pid 32153] mod_rewrite.c(475): [client 62.159.226.12:27139] 62.159.226.12 - - [example.com/sid#7f6588016340][rid#7f6587f810a0/initial] init rewrite engine with requested uri/
[rewrite:trace1] [pid 32153] mod_rewrite.c(475): [client 62.159.226.12:27139] 62.159.226.12 - - [example.com/sid#7f6588016340][rid#7f6587f810a0/initial] pass through/
[rewrite:trace3] [pid 32153] mod_rewrite.c(475): [client 62.159.226.12:27139] 62.159.226.12 - - [example.com/sid#7f6588016340][rid#7f6587f810a0/initial] [perdir *If/] add path info postfix: /var/www/example.com -> /var/www/example.com/public/
[rewrite:trace3] [pid 32153] mod_rewrite.c(475): [client 62.159.226.12:27139] 62.159.226.12 - - [example.com/sid#7f6588016340][rid#7f6587f810a0/initial] [perdir *If/] applying pattern '^' to uri '/var/www/example.com/public/'
[rewrite:trace2] [pid 32153] mod_rewrite.c(475): [client 62.159.226.12:27139] 62.159.226.12 - - [example.com/sid#7f6588016340][rid#7f6587f810a0/initial] [perdir *If/] rewrite '/var/www/example.com/public/' -> '/var/www/example.com'
[rewrite:trace1] [pid 32153] mod_rewrite.c(475): [client 62.159.226.12:27139] 62.159.226.12 - - [example.com/sid#7f6588016340][rid#7f6587f810a0/initial] [perdir *If/] initial URL equal rewritten URL: /var/www/example.com [IGNORING REWRITE]
正如你所看到的,它正確地映射,但由於某種原因,也不符合我通過重寫規則試過這種從那裏文件(我認爲這是因爲它不會追加index.html
或任何類似的東西)。
我該如何解決這個問題?
你能爲我舉個例子嗎?我試着用[這個配置](http://pastebin.com/i7vkfJ16)這對我的理解是你的建議。它仍然會導致循環檢測。如果我爲'RewriteRule'使用'END'標誌,它按預期工作,但顯然不會從我的.htaccess加載更多的重寫規則,因此應用程序的路由在存在'public'文件夾的地方被破壞 – Padarom
這裏有一個錯誤日誌的示例(帶有'rewrite:trace3'級別),當我使用它時沒有'[END]'標誌:http://pastebin.com/c6KDdh5b – Padarom