2012-06-22 59 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 - 原则*应该是相同的 - 更新。 –