如何将特定的URL段路由到单独的Web根目录?

时间:2013-07-31 13:00:20

标签: apache .htaccess mod-rewrite yii

我的yii项目有以下结构:

webapp  
----frontend  
--------www  
------------index.php
----backend  
--------www  
------------index.php  
----api  
--------www  
------------index.php

https://github.com/tonydspaniard/yiinitializr-advanced

Apache 2.2

每个www目录都有自己的.htaccess文件。例如“webapp / frontend / www / .htaccess”:

Options +FollowSymlinks

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^/].*)$ /index.php/$1 [L]

对于应用程序的不同部分,我使用子域“api.webapp.com”,“admin.webapp.com”(public_html文件夹中的符号链接):

webapp.com -> webapp/frontend/www   
api.webapp.com -> webapp/api/www  
admin.webapp.com -> webapp/backend/www

但是我遇到跨域ajax请求到api的问题,我希望得到这样的东西:

http://webapp.com -> webapp/frontend/www/index.php  
http://webapp.com/api/ -> webapp/api/www/index.php   
http://webapp.com/admin/ -> webapp/backend/www/index.php   

将URL段路由到特定Web根目录的正确方法是什么?别名,.htaccess,符号链接,还有别的吗?

2 个答案:

答案 0 :(得分:1)

正如aCodeSmith所说,您可以正确配置.htaccess文件来解决问题。

  1. http://webapp.com的文档根目录应为webapp
  2. 在文档根目录中,您应该使用类似的路由规则创建.htaccess文件。
  3. RewriteCond $1 ^api\/
    RewriteRule ^(.*) api/www/index.php [L,PT]
    
    RewriteCond $1 ^admin\/
    RewriteRule ^(.*) admin/www/index.php [L,PT]
    
    RewriteRule . frontend/www/index.php
    

    希望,这会有所帮助。

答案 1 :(得分:1)

谢谢,伙计们。 现在我有两个有效的解决方案:
1)Alex Akr  webapp是root
web应用/ htaccess的:

RewriteCond $1 ^api\/
RewriteRule ^(.*) api/www/index.php [L,PT]

RewriteCond $1 ^admin\/
RewriteRule ^(.*) admin/www/index.php [L,PT]

RewriteRule . frontend/www/index.php

2)webapp / frontend / www是root 在apache config中设置别名:

Alias /api /var/www/webapp/data/www/webapp/api/www
<Directory /var/www/webapp/data/www/webapp/api/www>
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

在/webapp/api/www/.htaccess

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule ^([^/].*)$ /api/index.php/$1 [L]