最近、複数のモジュールで Yii プロジェクトを実行している実稼働サーバーを再インストールしました。ルーティング部分は、再インストール前にうまく機能していました。問題がないか Nginx の構成を数回確認しましたが、すべて問題ないように見え、実際には古いサーバーから動作中の構成をコピーしました。
問題は、(任意のサブドメインでの) すべてのリクエストが CHttpException:Unable to resolve the request "default/site/index".
コントローラーなどを呼び出した場合でも発生することです。
テスト用に新しいサブドメイン(ルールが指定されていないもの)を開きましたが、それもこのエラーにリダイレクトされました。(最後の2つのルールなしで試してみました)
Yii には次のルーティング規則があります: (print_r の結果)
[http://www.domain.dk/<controller:\w+>/<action:\w+>/<wid:\w+>] => default/<controller>/<action>
[http://www.domain.dk/<controller:\w+>/<action:\w+>] => default/<controller>/<action>
[http://www.domain.dk/] => default/site/index
[http://api.domain.dk/<controller:\w+>/<action:\w+>/<wid:\w+>] => api/<controller>/<action>
[http://api.domain.dk/<controller:\w+>/<action:\w+>] => api/<controller>/<action>
[http://api.domain.dk/] => api/
[http://admin.domain.dk/<controller:\w+>/<action:\w+>/<wid:\w+>] => admin/<controller>/<action>
[http://admin.domain.dk/<controller:\w+>/<action:\w+>] => admin/<controller>/<action>
[http://admin.domain.dk/] => admin/site/index
[https://facebook.domain.dk/<controller:\w+>/<action:\w+>/<wid:\w+>] => facebook/<controller>/<action>
[https://facebook.domain.dk/<controller:\w+>/<action:\w+>] => facebook/<controller>/<action>
[https://facebook.domain.dk/] => facebook/site/index
[http://domain.dk/site/page/view/<view:\w+>/] => default/site/page
[http://<module:\w+>.domain.dk/<controller:\w+>/<action:\w+>/<wid:\w+>] => <module>/<controller>/<action>
[http://<module:\w+>.domain.dk/<controller:\w+>/<action:\w+>] => <module>/<controller>/<action>
すべての Nginx 構成は次のようになります。
server {
listen 80;
server_name api.domain.dk;
access_log /log/api.domain.dk_access.log;
error_log /log/api.domain.dk_error.log;
root /path.to.project/public_html;
include yii-rules.conf;
}
ファイルには次のyii-rules.conf
ような一般的なルールがあります: (私は違いを生むものだけをコピーします)
charset utf-8;
index index.php;
location / {
index index.html index.php;
try_files $uri $uri/ /index.php?$args;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#let yii catch the calls to unexising PHP files
set $fsn /index.php;
if (-f $document_root$fastcgi_script_name){
set $fsn $fastcgi_script_name;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
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;
}
このエラーの原因となる可能性のあるアイデアが不足しています。おそらく、私たちが気付いていない小さな問題です :\
このエラーはログに何も生成せず (もちろんアクセス ログのみ)、yii のアクセス ログは書き込みのみで、ブラウザに表示される内容は「解決できません...」です。
このエラーを回避するには、構成またはルール リストをどのように変更すればよいですか?