nginxのtry_filesの書き換え


8

私は非常に単純な書き換えを以前のnginxバージョンから現在のバージョンに以下のように変換しようとしています:

location / {
   if ( !-f $request_filename ) {
     rewrite ^/([a-z]*)$ /index.php?action=$1;
     rewrite ^/([a-z]*)/(.*)$ /index.php?action=$1&item=$2;
   }
}

これは私がどれだけ進んだかです。インデックスページが表示されますが、上記のように書き換える必要があるページは代わりに404をスローします。

server {

    listen 80 default;
    root /var/www;
    index index.php;
    server_name _;

    location / {
        try_files $uri $uri/ /index.php?action=$uri&item=$args;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

ここで何が悪いのですか?


正確に何が起こっているのですか?問題の一部は$ uriであり、$ argsが正しくエンコードされていません。
ルーク、

File not found. URIを使用した場合、/pageまたは/page/id
インダストリアルが

ちょうどあなたが行うとどうなりますtry_files $uri $uri/ /index.phpか?
ルーク、

Index.phpは適切に動作しますが、書き換えが必要なものはすべて404で終わります
インダストリアル

お試しくださいtry_files $uri $uri/ /index.php?$args。でURLを取得できるはず$_SERVER['REQUEST_URI']です。$ _GETは正常に動作するはずです。
ルーク

回答:


9

これはうまくいくはずです:

location / { 
    try_files $uri $uri/ @rules; 
} 

location @rules { 
    rewrite ^/([a-z]*)$ /index.php?action=$1; 
    rewrite ^/([a-z]*)/(.*)$ /index.php?action=$1&item=$2; 
}

location /index.php { 
    fastcgi_pass 127.0.0.1:9000; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
}

うーん。最初の例では、index.phpが読み込まれますが、静的ファイルやURIリクエストなど/page1/itemはindex.phpを返します
Industrial

それは変だ。try_filesがそれを処理する必要があります。
ルーク、

2番目の例も試しました。同じ問題
インダストリアル、

私は仮定しているtry_files $uri $uri/静的ファイルで作品を?
ルーク、

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.