簡體   English   中英

nginx:php文件擴展名不適用於try_files

[英]nginx: php file extension does not work with try_files

我正在嘗試制作一個下載腳本,將所有請求捕獲到/ files /並強制下載。 該腳本完全有效,並下載我拋出的任何文件。 問題是,當我嘗試通過try_files傳遞擴展名為.php的文件時,以下nginx配置會混亂:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

  listen 443 ssl;
  listen [::]:443 ssl;

    server_name _;

    root /var/www/localhost/public_html/;
    index index.php index.html index.htm index.txt;


  location /files/ {
        try_files $uri $uri/ /.thedownloadscript.php?file=$uri;
    }

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME /public_html$fastcgi_script_name;    

    include fastcgi_params;
  }

  ssl_certificate /var/www/server.crt;
  ssl_certificate_key /var/www/server.key;
}

/files/file.txt下載文件。

/files/script.php拋出404。

兩個路徑都應該傳遞給下載腳本,但不是。

我已經嘗試從“location~.php $”塊中刪除try_files,但這使得輸出“未指定輸入文件”

我希望有人可以幫助我。

提前致謝。

除非后者使用^~修飾符,否則任何正則表達式位置塊優先於同一級別的前綴位置塊。

請參閱此文檔了解詳細信息

嘗試:

location ^~ /files/ {
    try_files $uri $uri/ /.thedownloadscript.php?file=$uri;
}

請注意, location ^~ /files/ block是前綴位置(而不是正則表達位置)。

根據nginx最佳實踐,您應該隔離regexp位置:

location / {
    location ~ \.php$ {
        ...
    }
}

location /files/ {
    try_files $uri $uri/ /.thedownloadscript.php?file=$uri;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM