Php Yii使用当前url作为基础创建url(不同服务器的行为不同)

Php Yii使用当前url作为基础创建url(不同服务器的行为不同),php,yii,nginx,Php,Yii,Nginx,应用程序托管在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/productsur

应用程序托管在
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
url,但当代码被推到生产时,我们开始看到这个问题

我已经要求我的客户提供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; ?>
可能有关系

更新

经过一些调试,我发现了一些有趣的东西。如果我在
/products/add
页面上,
createUrl
将为
/admin
生成正确的链接。但是如果我在
/admin
页面上,
createUrl
将为
/products/add
生成不正确的链接。经过进一步调查,我发现这些
$\u服务器的属性不同

当我在
/admin

$this->createUrl( '/products' );
当我在
/products/add

看起来这只是一级路线上的问题,
/route
将成为问题,但
/route/action
不会

PHP版本:5.3.27 操作系统:Ubuntu 12

更新

/admin
路由的暂存和生产之间是否存在$u服务器头差异

登台

生产


我通过强制执行
baseUrl

'request'=>array
(
    'hostInfo'=>'http://www.domain.com',
    'baseUrl'=>'http://www.domain.com'
)

尽管我希望有人能提供一个解释性的答案。

您需要使用如下全局函数:

'components' => array
(
    'request'=>array
(
        'hostInfo'=>'http://www.domain.com'
),
function url($route,$params=array(),$ampersand='&'){
    return Yii::app()->createUrl($route,$params,$ampersand);
}
现在,您可以使用url('/admin'):


    > > ...
在视图中,可以使用url($this->id./index'):



它们是否属于同一控制器?您是否在模块内工作?它是布局代码的一部分-这些链接在菜单中。未使用任何模块。请添加一些有关操作和视图的代码。我不明白,你的函数是做什么的?这只是createUrl函数的简写,对吗?也许是,但为什么它属于这里?
[SCRIPT_NAME] => /admin/index.php
[REQUEST_URI] => /admin/index.php
[DOCUMENT_URI] => /admin/index.php
[SERVER_SOFTWARE] => nginx/1.4.2
'request'=>array
(
    'hostInfo'=>'http://www.domain.com',
    'baseUrl'=>'http://www.domain.com'
)
function url($route,$params=array(),$ampersand='&'){
    return Yii::app()->createUrl($route,$params,$ampersand);
}
<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>
<div class="span2 btn-toolbar">
    <?php echo CHtml::link('Listado',url($this->id.'/index'),array('class'=>'btn')); ?>
</div>