【问题标题】:How to create friendly links in Yii project using Yiinitializr如何使用 Yiiinitializr 在 Yii 项目中创建友好链接
【发布时间】:2013-10-30 08:04:02
【问题描述】:

我尝试将 Yiiinitializr 站点结构用于我的 Yii 项目。结构如下:

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)

Blank Yiinitializr strucure see on github

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

admin.mysite.com/invites - in backend

mysite.com/users - in frontend

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

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>

还有 Yii urlManagers 代码:

'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>',
    ),
),

【问题讨论】:

  • admin.mysite.com/site/invites 工作正常吗?

标签: php apache .htaccess yii


【解决方案1】:

更新后聊天中的讨论:
所有问题都在$_SERVER['SCRIPT_NAME'],等于/backend/www/index.php。这就是为什么 CHttpRequest::getPathInfo 中的请求解析是空值的原因,因为 $baseUrl(它是 $_SERVER['SCRIPT_NAME'] 的基础,而不是 '')和 $_SERVER['PHP_SELF'] == $_SERVER['SCRIPT_NAME']

两种解决方案:

  1. 设置在index.php开头$_SERVER['SCRIPT_NAME'] = '/index.php';
  2. 使该子域admin.example.com 直接访问目录/backend/www/

【讨论】:

  • 仍然重定向到索引
  • 您是重定向到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_export($_SERVER, true))。你能告诉我所有带有 url 的字符串吗(可能是 REQUEST_URI)
  • 解析错误:语法错误,第 13 行 ~/www/htdocs/backend/www/index.php 中的意外 T_REQUIRE
猜你喜欢
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 2012-10-08
  • 2010-12-27
  • 2010-11-01
相关资源
最近更新 更多