[英]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.