我的答案是,如果Apache不允許你在這裏做你想做的事情,但那是因爲AFAIK你不需要這樣做來做真正的需要做的事情。
看起來好像您正在嘗試創建一個本地環境,該環境在配置方面反映您的(遠程)基於服務器的測試環境。然而,你正在混淆URI名稱空間和文件系統名稱空間,而在Apache服務器中這些完全不同。例如<Location>
指令對前者進行操作,<Directory>
指令對後者進行操作。 .htaccess
這兩種方法都是相同的,因此您需要了解某個參數何時在其中一個參數上運行。
例如,我有一個服務多個子域*.ellisons.org.uk
的共享服務帳戶 - 例如我的博客位於http://blog.ellisons.org.uk/。我在Ubuntu筆記本電腦和虛擬機上開發了一個虛擬機,該虛擬機鏡像了我的服務提供商運行的LAMP/suPHP配置(但我擁有root訪問權並可以在VM上看到重寫日誌等),我在我的192.168.1.0/24
私有地址中靜態分配IP地址比這個URI空間空間,並有/etc/hosts
symonyms爲
127.0.1.1 ... blog.ellisons.org.home forum.ellisons.org.home ...
192.168.1.250 ... blog.ellisons.org.vm ...
但是其他的是相同的,從我的服務器,筆記本電腦或VM所以blog.ellisons.org.XX/themes/terry/all.css
負荷我的CSS取決於是否XX =英國,家庭,VM
然而我的筆記本電腦上的文檔根目錄是Debian標準/var/www
,但另外兩個是/websites/LinuxPackage02/el/li/so/ellisons.org.uk/public_html
(我的主機命名約定)。然而,我的應用程序包括.htaccess
文件是相同的,並且這些反映了這種多次使用的唯一方式是在正則表達式中,我使用它作爲正則表達式來匹配%{HTTP_HOST} (\w+)\.ellisons.\org\.(?:uk|home|vm)
。
所以你的例子:
- 沒有什麼阻止你指向你的本地計算機上的請求
/app
到你的物理目錄/codeigniter-app
。您可以在您的服務器或vhost配置中使用Alias
指令來執行此操作。
RewriteBase
將採用URI路徑參數,因此/app
可以同時工作。
- Apache一般理解URI和FS域之間的區別,不會感到困惑 - 即使您的開發人員經常這樣做:-)在極少數情況下,您需要明確提及FS名稱,比如
RewriteCond
字符串,您可以使用%{DOCUMENT_ROOT}
- 但如果您的服務是共享服務,則可能需要使用環境變量(我的是%{ENV:DOCUMENT_ROOT_REAL}
)。我phpinfo()會告訴你哪個。
- 確保您使用任何
RewriteRule
替換(不包括前導斜槓)中的相對地址。
所以總結一下,有思想的一點點,你可以讓你的配置邏輯相同像Apache提供 - 是不是比試圖在這是從來沒有設計到商品的方式,條件執行,以更好地彆彆扭扭?
localhost,測試站點(不同主機)和活動站點(rewritebase:/)。所以apache別名不起作用。如果你的建議是這樣的:http://stackoverflow.com/questions/2434820/many-rewritebase-in-one-htaccess-file請建議我將它應用到我的codeigniter .htaccess https://gist.github。 com/d11be61ebca9bc49daab – Alex 2012-02-09 23:22:28
+1爲您的廣泛的信息,我要試試這個:http://serverfault.com/questions/53145/mod-rewrite-and-multiple-rewritebases – Alex 2012-02-09 23:43:34
「本地主機,測試網站(不同的主機)和活網站(rewritebase:/)「。我假設你有root用戶訪問本地主機和測試站點的權限,所以你在他們的虛擬主機中使用別名,以便所有3的URI(位置層次結構)都是相同的,那麼你不需要有不同的重寫基地。這就是我所做的,我的實時配置與本地主機不同。 – TerryE 2012-02-10 10:08:35