1

EDIT ONE: Apacheを使用してWindows 7でもこれをテストしましたが、まったく同じことが起こります。これは、問題が主にホームページへのすべてのページのルーティングであることを意味します。

2 番目の編集: #yii IRC チャネルでの提案に従って、.htaccess ファイルの内容を、作業中のプロジェクトからの非常に単純化されたものに置き換えました。ただし、これによって問題が変化することはありません。

EDIT 3:コードにいくつかの変更を加えて、これがうまく機能するようになりました。以下の回答

ワークステーションにインポートした Yii Framework で書かれたサイトをインポートしようとしています。ページを読み込もうとしても、メイン ページに直接移動するだけであるという問題が発生しています。これは、ルート リクエストをロードした場合とまったく同じように、すべてのリクエストが本質的にルーティングされることを意味します。アクセス ログまたはエラー ログにエラーは表示されません。nginx のアクセス ログでは、リクエストは次のようになります。ここで、「example」は「localhost」、「127.0.0.1」、またはサーバーの IP アドレスです。

Accessing root ( http://example/ ): 
127.0.0.1 - - [08/May/2013:13:05:28 -0700] 
"GET / HTTP/1.1" 200 8436 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0"

Accessing login ( http://example/site/login ):
127.0.0.1 - - [08/May/2013:13:07:01 -0700] 
"GET /site/login HTTP/1.1" 200 8427 "http://example/" "Mozilla/5.0 (X11; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0"

Accessing the same controller by http://example/index.php?r=site/login:
127.0.0.1 - - [08/May/2013:14:40:45 -0700] 
"GET /index.php?r=site/login HTTP/1.1" 200 8419 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0"

他に 2 つの Yii プロジェクトがセットアップされていることを考えると、それらは同様のサーバー構成を使用して正常に動作しますが、これも以下に貼り付けます。私はまだ熱心ではありません。他のサイトからインポートした作業中のプロジェクトで、共有、試行、または比較できる何か他の提案があれば、大歓迎です:)

編集:実際に使用していたものに近い構成に切り替えました。これは、プロジェクトが Windows 上の Apache で実行されているときに同じ問題を抱えていることを考えると、おそらく無関係です。

server {
    server_name  localhost;
    listen 80;
    keepalive_timeout 70;

    root /usr/www/[project name omitted]/public_html;

    client_max_body_size 4M;
    client_body_buffer_size 4M;
    client_header_buffer_size 4M;

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

    location ^~ /data/ {
        expires 30d;
    }


    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    #Disable logging for favicon
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    #Disable logging for robots.txt
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location ~ /themes/\w+/views {
        deny all;
        access_log off;
        log_not_found off;
    }

    # Pass all .php files onto a php-fpm/php-fcgi server.
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        try_files $uri =404;
        #fastcgi_intercept_errors on;
        #fastcgi_connect_timeout 20;
        fastcgi_send_timeout 20;
        fastcgi_read_timeout 600; # For xdebug to work alright
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }
}
4

3 に答える 3

0

このプロジェクトの元の開発者に連絡した後、すべてを整理しました。開発者は、いくつかの変更が必要であることを知らせてくれました。それらは次のとおりです。

  • 次のようなコードのインスタンスを更新します。

    session_start();
    $_SESSION['allowdownload'] = true;
    session_write_close();
    
  • これとともに:

    $session=new CHttpSession;
    $session->open();
    $session['allowdownload'] = true;
    $session->close();
    
  • また、urlManager 配列の「showScriptName」の protected/config/main.php の設定を「false」ではなく「true」に変更します。これがいつか他の誰かを助けることを願っています!

于 2013-05-13T22:40:34.540 に答える
0

location /構成から次の行を削除する必要があります。

index index.html $yii_bootstrap;

$yii_bootstrap基本的に、常にインデックスファイルとして使用する必要があることをNginxに伝えます。したがって、この行try_filesは使用されません。

于 2013-05-09T07:40:34.577 に答える
0

私が見ることができる2つのこと。通常、Yii アプリの場合、次のようにロケーション ブロックを設定しています。index.php ファイルの前の「~」とスラッシュではありません。また、インデックス オプションをそのロケーション ブロックのに移動し、サーバー ルート ブロックに移動します。したがって、ロケーションブロックは次のようになります

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

2 つ目は、php のロケーション ブロックに関するものです。複数の php ファイルを実行している場合を除き、 Web 向けの php ファイルへのアクセスを許可するのではなく、index.php へのアクセスを指定するだけで済みます。

location ~ index.php$ {

ただし、このロケーションブロックは機能するはずです:

location ~ index.php$ {
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /path/to/yii/app$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_param  QUERY_STRING     $query_string;
    fastcgi_param  REQUEST_METHOD   $request_method;
    fastcgi_param  CONTENT_TYPE     $content_type;
    fastcgi_param  CONTENT_LENGTH   $content_length;
    fastcgi_intercept_errors        off;
    fastcgi_ignore_client_abort     off;
    fastcgi_connect_timeout 60; 
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
} 
于 2013-05-09T14:12:56.153 に答える