【发布时间】:2014-03-27 12:22:46
【问题描述】:
应用程序托管在www.domain.com
$this->createUrl( '/admin' );
用户点击管理员链接并被带到www.domain.com/admin
$this->createUrl( '/products' );
用户点击产品链接并被带到www.domain.com/admin/products,而不是预期的www.domain.com/products
奇怪的是,在登台服务器上,当点击产品时,用户会被带到预期的 www.domain.com/products 网址,但是当代码被推送到生产环境时,我们开始看到这个问题。
我已经要求我的客户提供PHP版本差异,所以在此期间,如果有人知道这里可能出现的问题,请赐教。
动作只是从模型和渲染视图中获取数据 - 没有重定向等
布局代码
<?php if ( ! Yii::app()->user->isGuest ): ?>
<nav id="main-nav">
<ul class="l_tinynav1">
<li<?php echo Yii::app()->controller->id === 'admin' ? ' class="active"' : ''; ?>>
<a href="<?php echo $this->createUrl( '/admin' ); ?>">Home</a>
</li>
<li<?php echo Yii::app()->controller->id === 'products' ? ' class="active"' : ''; ?>>
<a href="<?php echo $this->createUrl( '/products' ); ?>">Products</a>
</li>
<li<?php echo Yii::app()->controller->id === 'services' || Yii::app()->controller->id === 'faq' ? ' class="active"' : ''; ?>>
<a href="#">Content</a>
<ul style="display: block;">
<li><a href="<?php echo $this->createUrl( '/services' ); ?>">Services</a></li>
<li><a href="<?php echo $this->createUrl( '/faq' ); ?>">FAQs</a></li>
</ul>
</li>
<li><a href="<?php echo $this->createUrl( '/admin/logout' ); ?>">Logout</a></li>
</ul>
</nav>
<?php endif; ?>
注意
服务器使用 nginx proxy_pass 指令设置反向代理
所以我必须像这样在配置文件中定义 requests['hostInfo']:
'components' => array
(
'request'=>array
(
'hostInfo'=>'http://www.domain.com'
),
可能是相关的
更新
经过一些调试,我发现了一些有趣的东西。如果我在/products/add 页面上,createUrl 将为/admin 生成正确的链接。但是如果我在/admin 页面上,createUrl 会为/products/add 生成不正确的链接。经过进一步调查,我发现这些 $_SERVER 属性有所不同。
当我在/admin
[SCRIPT_NAME] => /admin/index.php
[REQUEST_URI] => /admin/index.php
[DOCUMENT_URI] => /admin/index.php
当我在/products/add
[SCRIPT_NAME] => /index.php
[REQUEST_URI] => /products/add
[DOCUMENT_URI] => /index.php
看起来这只是一级路由的问题,/route 会是问题,但/route/action 不会。
PHP 版本:5.3.27 操作系统:Ubuntu 12
更新
/admin 路由的暂存和生产之间是否存在 $_SERVER 标头的差异
分期
[SCRIPT_NAME] => /index.php
[REQUEST_URI] => /admin/
[DOCUMENT_URI] => /index.php
[SERVER_SOFTWARE] => nginx/1.0.14
生产
[SCRIPT_NAME] => /admin/index.php
[REQUEST_URI] => /admin/index.php
[DOCUMENT_URI] => /admin/index.php
[SERVER_SOFTWARE] => nginx/1.4.2
【问题讨论】:
-
它们是否属于同一个控制器?你在模块内工作吗?
-
它的部分布局代码 - 这些链接在菜单中。没有使用任何模块。
-
请添加一些有关操作和视图的代码。所以可能很清楚。