1

私は CakePHP を使用してサイトを作成する任務を負っていたので、最新の 2.2.3 をダウンロードし、ローカルの nginx 1.2.4 サーバーで構成する必要があります。

私はserver_block働いていますが、何らかの理由でCSSをロードできません。テストのホームページでも、URL の書き換えが正しく機能していないことが報告されています。

多くの記事や質問を読んできましたが、問題を解決できるものはないようです。今まで参考にしてきた、

私のcssリンクは次のようになります。
<link rel="stylesheet" type="text/css" href="/Users/david/Sites/example.com/css/cake.generic.css" />

Nginx が CSS の読み込みを許可しない理由を突き止める必要があります。これまでのところ、すべてのリンクに を追加していることしかわかりません$_SERVER['DOCUMENT_ROOT']。これは明らかに、CSS が正しくリンクされないことを意味します。Cakephp がこの余分な情報を取得するのを止める人を見つける必要があります。リンクは次のように HtmlHelper に渡されますstring '/Users/david/Sites/example.com//Users/david/Sites/example.com/css/cake.generic.css' (length=86)

現在、私のnginx構成サーバーブロックは次のようになっています。

server { 
    server_name  example.com;

    root   /Users/david/Sites/example.com/app/webroot/;

    access_log /usr/local/var/log/nginx/example.com.access.log;
    error_log /usr/local/var/log/nginx/example.com.error.log;

    listen       80;
    rewrite_log on;

    # rewrite rules for cakephp
    location / {
        index  index.php index.html;

        # If the file exists as a static file serve it 
        # directly without running all
        # the other rewite tests on it
        if (-f $request_filename) { 
            break; 
        }

        if (!-f $request_filename) {
            rewrite ^(.+)$ /index.php?url=$1 last;
            break;
        }
    }

    location ~* \favicon.ico$ {
        expires 6m;
    }
    location ~ ^/img/ { 
        expires 7d; 
    } 

    location ~ \.php$ {
        fastcgi_pass  127.0.0.1:9001;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SERVER_NAME example.com;
        include       fastcgi_params;
    }

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

FastCGIParams

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_param  SCRIPT_NAME        $request_filename;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

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;
fastcgi_intercept_errors on;
4

3 に答える 3

4

それで、私は問題が何であるかを理解することができました。の変数であることがわかります。core.php

に変更Configure::write('App.baseUrl', env('SCRIPT_NAME'));するとConfigure::write('App.baseUrl', '/');、すべてが機能しているように見え、css ファイルに正しくルーティングされます。

私のnginx構成は次のようになります。

server {
    listen   127.0.0.1:80;
    server_name  example.com.ukwm157;

    root /Users/david/Sites/example.com/app/webroot;
    index index.php index.html;

    log_not_found off;
    charset utf-8;

    access_log /usr/local/var/log/nginx/example.com.access.log main;
    error_log /usr/local/var/log/nginx/example.com.error.log;

    location / {

      index index.php index.html index.htm;

      if (-f $request_filename) {
        break;
      }
      if (-d $request_filename) {
        break;
      }

      rewrite ^(.+)$ /index.php?q=$1 last;

    }

    # Static files.
    # Set expire headers, Turn off access log
    location ~* \favicon.ico$ {
      access_log off;
      expires 1d;
      add_header Cache-Control public;
    }

    location ~ ^/(img|cjs|ccss)/ {
      access_log off;
      expires 7d;
      add_header Cache-Control public;
    }

    # Deny access to .htaccess files,
    # git & svn repositories, etc
    location ~ /(\.ht|\.git|\.svn) {
      deny  all;
    }

    location ~ .php?$ {
        #if (!-e $document_root$document_uri){return 404;}
        fastcgi_pass 127.0.0.1:9001;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}
于 2012-10-12T09:47:53.847 に答える
-1

問題は、URL ではなくファイル パスを使用していることだと思います。

于 2012-10-11T16:17:01.247 に答える