Nginx ดาวน์โหลดไฟล์ PHP เฉพาะในกรณีที่. php อยู่ใน URL


8

ฉันรู้ว่านี่เป็นคำถามยอดนิยม แต่ฉันไม่พบใครที่มีปัญหาคล้ายกัน ฉันสามารถให้บริการไฟล์ PHP ได้ตราบเท่าที่นามสกุล. php ไม่ได้อยู่ใน URL ตัวอย่างเช่น:

ถ้าฉันไปที่localhostฉันได้รับไฟล์ index.php ของฉัน ถ้าฉันไปlocalhost/index.phpฉันดาวน์โหลดไฟล์ นี่คือการกำหนดค่าของฉัน:

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;
    }
}

ฉันค่อนข้างสับสนกับปัญหานี้และฉันสงสัยว่าใครมีประสบการณ์ในเรื่องนี้หรือไม่


คุณสามารถโพสต์ของคุณphp.iniหรือไม่
kraxor

คำตอบ:


4

หากบางครั้งมันใช้งานได้ (เพื่อให้คุณรู้ว่า PHP-FPM ทำงานและทำงานได้) ฉันจะต้องติดใจในเรื่องนี้เป็นปัญหา nginx ฉันสงสัยกฎสองสามข้อในบล็อกตำแหน่ง PHP ของคุณ พวกเขาอาจจะแตกในบาง URL ที่ทำให้ nginx จะทิ้ง

คุณต้องการเพียง2 บรรทัดสำหรับการจับดัชนีไดเรกทอรี:

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

ตัดตำแหน่งนั้นกลับไปที่โหลด nginx แล้วดูว่าเกิดอะไรขึ้น

หากคุณต้องการเขียนใหม่ (URL ที่น่ารักใน Wordpress ฯลฯ ) คุณต้องการเพิ่มสิ่งนี้

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

แต่ทำอย่างนั้นก็ต่อเมื่อคุณมี URL มาตรฐานทำงาน


2
ฉันทำการเปลี่ยนแปลงและในตอนแรกมันไม่ทำงาน จากนั้นฉันก็ลบแคชในเบราว์เซอร์และใช้งานได้ ขอขอบคุณสำหรับเวลาของคุณ! :)
แม็ตธิว

1

มีปัญหาเดียวกันนี้ แต่ฉันก็ต้องการสายนี้

include fastcgi.conf;

ฉันยังมี

location ~* .+ {..}

และต้องทำให้แน่ใจว่ามันไปหลังจากที่ตั้ง ~ \.php$ {..}


1
อืมน่าสนใจinclude fastcgi.conf;เกือบจะเหมือนกันinclude fastcgi_params;แต่รวมถึงการfastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;ที่ผู้ใช้บางคนที่รวมinclude fastcgi_params;แทนที่จะ.confรวมด้วยตนเองในการกำหนดค่าเว็บไซต์ของพวกเขา
LiveWireBT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.