0

こんにちは–私はこれに何日も苦労しています。簡単そうに見えますが、私にはできません。

CakePHPで開発されたサイトがあります。応答するスクリプトがあり/css/profiles/g/whatever.css(「何でも」は何でも、実際にはアクションに渡されるパラメーターです)、生成されたCSSをエコーし​​て、に保存し/css/profiles/whatever.cssます。

Apacheには、リクエストを受け取り/css/profiles/whatever.css、存在しない場合は/css/profiles/g/whatever.cssリダイレクトせずにリクエストを書き換えるルールがあるため、クライアントは、スクリプトによって応答され、ファイルが存在しないことに気付くことはありません。

これは私がApacheに持っているものです:

# Profile CSS rules
RewriteCond %{REQUEST_URI} ^/css/profiles/
RewriteCond %{REQUEST_URI} !/css/profiles/g/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^css/profiles/(.*)$ /css/profiles/g/$1 [L]

# CakePHP's default rules
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

今、私はサイトをNginxを備えたサーバーに移動しています、そしてこれまでのところ私はこれを持っています:

# Profile CSS rules
location ~ ^/css/profiles/(?!g/)(.*)$ {
    if (!-f $request_filename) {
      rewrite ^/css/profiles/(.*)$ /css/profiles/g/$1 last;
      break;
    }

 }

# CakePHP's default rules
location / {

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

/css/profiles/whatever.cssPHPの$_SERVER変数にアクセスして出力すると、条件が機能しているように見えます。

[QUERY_STRING] => /css/profiles/g/whatever.css&

に注意して&ください。これは、その部分に到達し、クエリ文字列にをtry_files追加したことを意味し、正しい。を持っています。$uri$uri

だが...

[REQUEST_URI] => /css/profiles/whatever.css

それがグリッチです。$request_uriCakePHPがどのコントローラーが何に参加するかを制御するために必要なものは実際には変更されていないようです。

更新REQUEST_URI値は正しいです...ここでの問題は、Cakeがさまざまなサーバー変数の値を探して、どのコントローラーが応答するかを決定することです。この順序で:$_SERVER['PATH_INFO']、、$_SERVER['REQUEST_URI']との組み合わせ、$_SERVER['PHP_SELF']そして$_SERVER['SCRIPT_NAME']最後に$_SERVER['HTTP_X_REWRITE_URL']。それが失敗している理由です。

どんな助けでもありがたいです。

ありがとう。

:昨日、この質問をServerfultに投稿しました。これは、Serverfultの方が適していると思いますが、回答が得られなかったためです。そのため、ここにも投稿しています。

4

1 に答える 1

1

だから私はついにそれを機能させました:

location ~ ^/css/profiles/(?!g/)(.*)$ {
  set $new_uri /css/profiles/g/$1;
  if (!-f $request_filename) {
    rewrite ^/css/profiles/(.*)$ /css/profiles/g/$1 last;
  }
}

...そして最後に:

location ~ \.php$ {
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  include fastcgi_params;

  ... some other stuff were here related to fastcgi
  fastcgi_param PATH_INFO $new_uri; # <--- I added this
}
于 2012-07-18T01:54:37.653 に答える