2011-05-05 29 views
2

我有一個應用程序在幾個不同的環境中運行,有時它在一個站點的頂層或有時在一個別名內運行。在Apache別名內匹配的RewriteRules

當它是一個直接結算到正常的文檔根我的.htaccess是這樣的:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /index.php [NC,L] 

我在那有一個像下面的別名的環境中部署的網站:

Alias /foo /path/to/my/application/ 

我發現我不得不修改.htaccess以下內容:

RewriteEngine On 
RewriteBase /foo 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /foo/index.php [NC,L] 

我的問題是,如何我是否可以重寫我的.htaccess,以便重寫的工作方式與別名相同?有什麼方法可以檢測到是否設置了別名,或者其他方式來表示RewriteRules?

+0

你有沒有想出解決辦法? – Andre 2013-06-18 23:44:29

回答

1

由於mod_rewrite優先於mod_alias,因此您可能需要用重寫規則替換別名。

此:

Alias /foo /path/to/my/application/ 

將成爲:

RewriteRule ^foo.*$ path/to/my/application$1 [L] 

然後在可能會或可能不會在根本沒有你不必改變他們應該工作的.htaccess文件的規則。

+0

問題是我們的網站是幾乎獨立的單獨的代碼庫,發生在主站點別名 – 2011-05-16 10:23:56

+0

啊,我明白了。那麼我不確定你怎麼做到這一點。 :\ – Compeek 2011-05-16 14:06:21

0

的解決方案是創建一個符號鏈接,如果你有機會到您的文檔根:

ln -s /<path to application> /<document root>/foo