代码之家  ›  专栏  ›  技术社区  ›  Eddie Jibson

Nginx在尝试删除扩展名时正在下载PHP文件

  •  1
  • Eddie Jibson  · 技术社区  · 6 年前

    所以,基本上我当前的配置如下。每当我尝试请求没有PHP扩展的URL时,它会下载它吗?

    server {
    
          listen [::]:80;
    
          root myDirectory;
    
          index index.php index.html;
    
          server_name myDomain;
    
          location / {
            try_files $uri $uri/ $uri.php $uri.php$is_args$query_string =404;
    
          }
    
          location ~\.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param SCRIPT_NAME $fastcgi_script_name;
            fastcgi_pass unix:/run/php/php7.1-fpm.sock;
          }
    
          location ~ /\ ht {
            deny all;
          }
    
        }
    

    我已经完成了其他问题中许多其他答案的建议,比如编辑php7。1-fpm php。ini文件:

    cgi.fix_pathinfo=0
    

    有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Richard Smith    6 年前

    您当前使用的 try_files 不起作用。这个 文件 的要素 try\u文件 语句在同一个 location 块,这是PHP文件的错误位置。看见 this document 更多信息。

    有许多解决方案,但您可以使用 命名位置 执行 内部重写 如果发现脚本文件存在。

    例如:

    location / {
        try_files $uri $uri/ @rewrite;
    }
    location @rewrite {
        if (-f $document_root$uri.php) { rewrite ^ $uri.php last; }
        return 404;
    }
    location ~ \.php$ {
        try_files $uri =404;
    
        include snippets/fastcgi-php.conf;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
    }
    

    看见 this caution 关于if的使用。