2012-06-22 57 views
0

我使用CodeIgniter創建了一個PHP應用程序,而且這個項目實際上有3個子應用程序,因此每個應用程序都有三個單獨的索引文件。我打算爲這些應用程序使用三個不同的子域。最後,該項目位於我的Apache文檔根目錄的子目錄下。使用mod_rewrite爲3個子域創建重寫規則

因此,例如,該用戶應該URL映射到

http://app1.example.com/ABC -----> http://app1.example.com/ext/app1.php/ABC 
http://app2.example.com/DEF -----> http://app2.example.com/ext/app2.php/DEF 
http://app3.example.com/XYZ -----> http://app3.example.com/ext/app3.php/XYZ 

還有其他的應用程序,如APP4和APP5,我不想要應用規則。

我之前使用過並且編寫過重寫規則,但它們相當簡單,我無法破解這個規則。我在.htaccess中使用了以下內容,當我嘗試訪問讓我們說app1時,url變成了http://app1.example.com/ext/app1.php/ext/app1.php/ext/app1.php/{manytimes}

因此它正在循環。

RewriteEngine on 
RewriteBase/
RewriteCond %{HTTP_HOST} ^app1\.example\.com$ 
RewriteRule^http://app1.example.com/example/app1.php%{REQUEST_URI} [L] 
RewriteCond %{HTTP_HOST} ^app2\.example\.com$ 
RewriteRule^http://app2.example.com/example/app2.php%{REQUEST_URI} [L] 
RewriteCond %{HTTP_HOST} ^app3\.example\.com$ 
RewriteRule^http://app3.example.com/example/app3.php%{REQUEST_URI} [L] 

所以真正的子域名是 - api,viewer和studio,並且在它們最後沒有真正的序列。

我最新的嘗試是:

RewriteEngine on 
RewriteBase/
RewriteCond %{HTTP_HOST} ^(viewer|api|studio)\.example\.com$ 
RewriteRule ^/(.*)\.example\.com/(.*) http://$1.example.com/ext/$1.php/$2 [L] 

回答

0

如果你不會使用擴展.php你應該能夠做這樣的事情:

RewriteEngine On 
RewriteBase/

# For app1 through app3.example.com 
RewriteCond %{HTTP_HOST} ^(viewer|api|studio)\.example\.com$ 
# If the request path does not contain the string (viewer or api or studio).php 
RewriteCond %{REQUEST_URI} ! %1\.php 
# Re-write it to go to the appropriate app 
RewriteRule ^.*$ /ext/%1.php%{REQUEST_URI} [L] 
+0

感謝肖恩。所以我應該更好地提出問題,因爲真正的子域實際上並沒有序列號。真正的子域名是 - api,viewer和studio。換句話說,我需要抓住整個子域。請參閱我最近嘗試的更新。我會感激不盡,你可以幫助它。非常感謝。 –

+0

@BirenderSaini - 原則*應該是相同的 - 更新。 –