1

私はYIIFrameworkを使用しており、Apacheサーバーではすべて問題ありませんが、Nginxでは問題が発生します。URL www.test.com/index.php/a/bをリクエストすると、$ _ SERVER['SCRIPT_NAME']は'/index.php'を返します。これはまさに必要なものですが、URLwww.testをリクエストすると。 'index.php'という名前の同じファイルに書き換えられるcom/a / b、$ _ SERVER['SCRIPT_NAME']は、Apacheとは異なる'index.php'であることがわかります。私のnginxconfは次のとおりです:

server {
    set $host_path "/data/yii/application";
    access_log  off;

    server_name www.yii.com;
    root   $host_path;
    set $yii_bootstrap "index.php";

    charset utf-8;

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

    location ~ ^/(protected|framework|themes/\w+/views) {
        deny  all;
    }

    #avoid processing of calls to unexisting static files by yii
    location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
        try_files $uri =404;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php {
        fastcgi_split_path_info  ^(.+\.php)(.*)$;

        #let yii catch the calls to unexising PHP files
        set $fsn /$yii_bootstrap;
        if (-f $document_root$fastcgi_script_name){
            set $fsn $fastcgi_script_name;
        }

        fastcgi_pass   127.0.0.1:9001;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fsn;

        #PATH_INFO and PATH_TRANSLATED can be omitted, but RFC 3875 specifies them for CGI
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fsn;
    }

    location ~ /\.ht {
        deny  all;
    }
}
4

1 に答える 1

2

この部分は間違っています:

set $yii_bootstrap "index.php";

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

そのはず:

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

参照: http: //nginx.org/en/docs/faq/variables_in_config.html

-

そしてこの部分:

location ~ \.php {
    fastcgi_split_path_info  ^(.+\.php)(.*)$;

    #let yii catch the calls to unexising PHP files
    set $fsn /$yii_bootstrap;
    if (-f $document_root$fastcgi_script_name){
        set $fsn $fastcgi_script_name;
    }

    fastcgi_pass   127.0.0.1:9001;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fsn;

    #PATH_INFO and PATH_TRANSLATED can be omitted, but RFC 3875 specifies them for CGI
    fastcgi_param  PATH_INFO        $fastcgi_path_info;
    fastcgi_param  PATH_TRANSLATED  $document_root$fsn;
}

次のように置き換える必要があります:

location ~ ^(?<script>.+\.php)(?<pathinfo>.*)$ {
    try_files $script =404;

    fastcgi_pass   127.0.0.1:9001;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$script;

    #PATH_INFO and PATH_TRANSLATED can be omitted, but RFC 3875 specifies them for CGI
    fastcgi_param  PATH_INFO        $pathinfo;
    fastcgi_param  PATH_TRANSLATED  $document_root$script;
}

-

そして、あなたはこのようなことを避けるべきです:

set $host_path "/data/yii/application";
root   $host_path;

でなければなりません:

root /data/yii/application;

http://nginx.org/en/docs/faq/variables_in_config.html

于 2012-07-10T19:56:59.670 に答える