Yii从NGINX上的url中删除index.php

时间:2015-12-14 10:58:42

标签: php redirect nginx yii url-routing

我已经将Yii 1网站移动到使用NGINX的新Ubuntu服务器,并且除了没有index.php部分的已清理URL以外,一切正常。例如,页面http:// **** / site / about重定向到主页,但http://****/index.php/site/about显示正确的页面。我当前的服务器块配置文件包含此位置规则:

location / {
    try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param QUERY_STRING    $query_string;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

我也尝试过使用

try_files $uri $uri/ /index.php$uri?$args;

但最终会出现重定向循环。

似乎重写/index.php$uri?$args永远不会对$ uri检查进行验证。

在Yii配置中我有

'urlManager' => array (
            'urlFormat' => 'path',
            'showScriptName' => false,
            'caseSensitive' => false,
            'rules' => array (
                '<public_url:about>'=>'site/about',
                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
                ....

所以问题是如何使http:// **** / site / about显示与http://****/index.php/site/about请求相同的页面?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

  

似乎重写/index.php$uri?$args永远不会对$ uri进行验证   检查。

没有。 location \.php$仅匹配以.php结尾的URI。添加路径信息后,它将不再匹配。

使用路径信息处理php脚本的正确方法是将终止$替换为(/|$),并使用fastcgi_split_path_info指令将路径信息与脚本路径名分开。有关详细信息,请参阅this document