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는 올바르게 인코딩되지 않습니다.
누가

(404)에 발생합니다 File not found. 나도 URI 사용하는 경우 /page또는/page/id
산업

당신이 할 때 어떻게됩니까 try_files $uri $uri/ /index.php?
누가

Index.php는 훌륭하게 작동하지만 다시 작성해야 할 모든 것은 404에서 끝납니다
Industrial

시도하십시오 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가 처리해야합니다.
누가

두 번째 예도 시도했습니다. 같은 문제
Industrial

try_files $uri $uri/정적 파일로 작업 한다고 가정 합니까?
누가

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.