我的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,符号链接,还有别的吗?
答案 0 :(得分:1)
正如aCodeSmith所说,您可以正确配置.htaccess
文件来解决问题。
http://webapp.com
的文档根目录应为webapp
。.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
希望,这会有所帮助。
答案 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]