托管于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
路由
分段
[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
答案 0 :(得分:0)
我通过强制baseUrl
'request'=>array
(
'hostInfo'=>'http://www.domain.com',
'baseUrl'=>'http://www.domain.com'
)
虽然我希望有人可以提供解释性答案。
答案 1 :(得分:-3)
你需要使用这样的全局函数:
function url($route,$params=array(),$ampersand='&'){
return Yii::app()->createUrl($route,$params,$ampersand);
}
现在,您可以使用网址('/ admin'):
<nav id="main-nav">
<ul class="l_tinynav1">
<li<?php echo Yii::app()->controller->id === 'admin' ? ' class="active"' : ''; ?>>
<a href="<?php echo url( '/admin' ); ?>">Home</a>
</li>
<li<?php echo Yii::app()->controller->id === 'products' ? ' class="active"' : ''; ?>>
<a href="<?php echo url( '/products' ); ?>">Products</a>
</li>
...
<li><a href="<?php echo url( '/admin/logout' ); ?>">Logout</a></li>
</ul>
</nav>
在视图中,您可以使用网址($ this-&gt; id。'/ index'):
<div class="span2 btn-toolbar">
<?php echo CHtml::link('Listado',url($this->id.'/index'),array('class'=>'btn')); ?>
</div>