Nginx chỉ tải xuống tệp PHP nếu .php có trong URL


8

Tôi biết đây là một câu hỏi phổ biến nhưng tôi chưa tìm thấy ai có vấn đề tương tự. Tôi có thể phục vụ các tệp PHP miễn là phần mở rộng .php không có trong url. Ví dụ:

Nếu tôi đi đến localhosttôi được phục vụ tập tin index.php của tôi. Nếu tôi đi đến localhost/index.phptôi tải tập tin. Đây là cấu hình của tôi:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    #   proxy_pass http://127.0.0.1:8080;    
    #}

    error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny all;
    }
}

Tôi khá bối rối bởi vấn đề này và tôi tự hỏi liệu có ai có kinh nghiệm trong vấn đề này không.


Bạn cũng có thể gửi bài của bạn php.ini?
kraxor

Câu trả lời:


4

Nếu điều này đôi khi hoạt động (vì vậy bạn biết PHP-FPM đang hoạt động), tôi sẽ khá bối rối vì đây là vấn đề nginx. Tôi nghi ngờ về một vài quy tắc trong khối vị trí PHP của bạn. Họ có thể đang phá vỡ một số URL nhất định khiến nginx bị loại ra.

Bạn chỉ cần 2 dòng để bắt các chỉ mục thư mục:

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
}

Tách vị trí đó trở lại vị trí đó, tải lại nginx và xem điều gì sẽ xảy ra.

Nếu bạn cần viết lại (các URL đẹp trong Wordpress, v.v.), bạn muốn thêm một cái gì đó như thế này

location / {
        try_files $uri $uri/ /index.php?$args;
}

Nhưng chỉ làm điều đó một khi bạn đã có URL tiêu chuẩn hoạt động.


2
Tôi đã thực hiện các thay đổi và lúc đầu nó không hoạt động. Sau đó, tôi xóa bộ nhớ cache trên trình duyệt của mình và nó đã hoạt động. Cảm ơn bạn đã dành thời gian! :)
Mathew A

1

Có vấn đề tương tự, tuy nhiên, tôi cũng cần dòng này

include fastcgi.conf;

Tôi cũng đã có

location ~* .+ {..}

và phải chắc chắn rằng nó đã đi sau vị trí ~ \.php$ {..}


1
Hmm thú vị include fastcgi.conf;gần giống như include fastcgi_params;nhưng bao gồm cả fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;một số người dùng bao gồm include fastcgi_params;thay vì .confbao gồm thủ công trong cấu hình trang web của họ.
LiveWireBT
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.