2016-06-08 2 views
1

PHP 확장명을 제거하고 싶습니다. 그래서 나는이 코드를 검색하고 시도했다.Nginx 서버가 파일 확장명을 다시 작성한 후 리디렉션하지 않습니다.

잘 작동하지만 존재하지 않는 페이지를 시도했을 때 작동합니다.

"파일을 찾을 수 없습니다." 쓰기 전에 'try_files $ uri ...;' /404.html을 반환합니다.

시도해 보았습니다. try_files $ uri = 404; .php $하지만 모든 페이지는 /404.html로 돌아갑니다.

server { 
    listen  80 default_server; 
    listen  [::]:80 default_server; 
    server_name localhost; 
    root   /var/www/html; 

    include /etc/nginx/default.d/*.conf; 

    location/{ 
      try_files $uri $uri.html $uri/ @extensionless-php; 
      index index.html index.php; 
    } 

    location ~ \.php$ { 
      root   html; 
      fastcgi_pass 127.0.0.1:9000; 
      fastcgi_index index.php; 
      fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; 
      include   fastcgi_params; 
    } 

    location @extensionless-php { 
      rewrite ^(.*)$ $1.php last; 
    } 


    error_page 404 /404.html; 
     location = /40x.html { 
      root /var/www/html; 
    } 

    error_page 500 502 503 504 /50x.html; 
     location = /50x.html { 
      root /var/www/html; 
    } 


} 

어떻게 해결할 수 있습니까 ??

답변

0

존재 여부를 확인하지 않고 .php 개의 파일을 PHP 프로세서에 전달 중입니다.

location ~ \.php$ 블록을 수정하여 PHP가 불평하지 않고 nginx이 존재하지 않는 파일을 404 응답으로 처리하도록해야합니다. 블록이 이제 외부 블록에서 올바른 값을 상속 있도록, 그냥 혼란이었다 나는 여분의 root 지시자를 제거한

location ~ \.php$ { 
    try_files $uri =404; 
    include   fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_pass 127.0.0.1:9000; 
} 

: 같은

보십시오 뭔가. 이 경우에 사용되지 않는 fastcgi_index을 삭제했습니다. fastcgi_param 문을 자동으로 덮어 쓰지 않으려면 include 아래에 fastcgi_param을 주문했습니다.

관련 문제