Php 如何使用yiInitializer在Yii项目中创建友好链接

Php 如何使用yiInitializer在Yii项目中创建友好链接,php,apache,.htaccess,yii,Php,Apache,.htaccess,Yii,我尝试在我的Yii项目中使用yiinitializer站点结构。结构如下所示: root --backend ----standart yii folders ----... ----www ------index.php (admin.mysite.com) --common ----common folders for backend and frontend ----... --backend ----standart yii folders ----... ----www ------i

我尝试在我的Yii项目中使用yiinitializer站点结构。结构如下所示:

root
--backend
----standart yii folders
----...
----www
------index.php (admin.mysite.com)
--common
----common folders for backend and frontend
----...
--backend
----standart yii folders
----...
----www
------index.php (mysite.com)
admin.mysite.com/invites - in backend

问题是如何制作这样的工作URL:

root
--backend
----standart yii folders
----...
----www
------index.php (admin.mysite.com)
--common
----common folders for backend and frontend
----...
--backend
----standart yii folders
----...
----www
------index.php (mysite.com)
admin.mysite.com/invites - in backend

当我在虚拟主机上上传项目时,出现了路由问题。后端,例如:

admin.mysite.com/backend/www/?r=site/invites - working properly
admin.mysite.com/backend/www/invites - working properly
admin.mysite.com/?r=site/invites - working properly
admin.mysite.com/invites - redirects to index
根文件夹拥有自己的.htaccess,可访问以下内容:

RewriteEngine On 
RewriteRule ^backend/www/ - [last] 
RewriteCond %{HTTP_HOST} admin.mysite.com [nocase] 
RewriteRule (.*) backend/www/$1 [last]

RewriteRule ^frontend/www/ - [last] 
RewriteCond %{HTTP_HOST} !admin.mysite.com [nocase] 
RewriteRule (.*) frontend/www/$1 [last]
backend/www/.htaccess具有重写规则:

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php
</IfModule>

选项+FollowSymlinks
重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则。index.php
和Yii代码:

'urlManager' => array(
    // uncomment the following if you have enabled Apache's Rewrite module.
    'urlFormat' => 'path',
    'showScriptName' => false,

    'rules' => array(
        // default rules
        '<page:\w+>' => 'site/<page>',
        '' => 'site/index',
        '<controller:\w+>/<id:\d+>' => '<controller>/view',
        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
    ),
),
'urlManager'=>数组(
//如果启用了Apache的重写模块,请取消注释以下内容。
“urlFormat”=>“路径”,
'showScriptName'=>false,
'规则'=>数组(
//默认规则
''=>'站点/',
''=>'站点/索引',
“/”=>“/视图”,
'//' => '/',
'/' => '/',
),
),

聊天室讨论后更新:
所有问题都将出现在
$\u服务器['SCRIPT\u NAME']
,它等于
/backend/www/index.php
。这就是为什么在
CHttpRequest::getPathInfo
中解析请求是空值的原因,因为$baseUrl(它是$\u服务器['SCRIPT\u NAME']的basedir,而不是
'
)和
$\u服务器['PHP\u SELF']==$\u服务器['SCRIPT\u NAME']


两种解决方案:

  • 设置在index.php
    $\u服务器['SCRIPT\u NAME']='/index.php'的开头
  • 使该子域
    admin.example.com
    直接访问目录
    /backend/www/

  • admin.mysite.com/site/invests
    是否正常工作?是否仍重定向到Indexa是否重定向到
    admin.mysite.com/backend/www/index.php
    admin.mysite.com/index.php
    ?运行actionIndex,但我不知道如何检查重定向到的确切url。托管支持从服务器的角度写下admin.mysite.com/backend/www/index.php和admin.mysite.com/index.php是您可以在以下所有代码之前插入index.php的相同地址:
    exit(var\u export($\u server,true))
    。你能给我看一下所有带有url的字符串(可能是请求URI)解析错误:语法错误,第13行的~/www/htdocs/backend/www/index.php中出现意外的T\u REQUIRE