Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nginx将一些PHP url作为下载而不是执行_Php_Nginx - Fatal编程技术网

nginx将一些PHP url作为下载而不是执行

nginx将一些PHP url作为下载而不是执行,php,nginx,Php,Nginx,一些PHP URL正在下载,而不是由Nginx执行。我有一个运行良好的现有web应用程序。我的任务是在主应用程序的文件夹中添加其他装入的应用程序。每个应用程序都有自己的前端控制器index.phpscript 对于这个设置,我在$document\u root/app中创建了符号链接,符号链接指向一个包含index.php前端控制器的文件夹 root /my/web/root; location / { try_files $u

一些PHP URL正在下载,而不是由Nginx执行。我有一个运行良好的现有web应用程序。我的任务是在主应用程序的文件夹中添加其他装入的应用程序。每个应用程序都有自己的前端控制器
index.php
script

对于这个设置,我在
$document\u root/app
中创建了符号链接,符号链接指向一个包含
index.php
前端控制器的文件夹

root                    /my/web/root;

location / {
    try_files           $uri
                        /$server_name$uri
                        /shared$uri
                        /index.php$is_args$args;
}

location ~ [^/]\.php(/|$) {
    disable_symlinks    off;
    fastcgi_split_path_info ^(.+\.php\b)(.*)$;
    fastcgi_param       SERVER_NAME $host;
    fastcgi_param       PATH_INFO $fastcgi_path_info;
    fastcgi_param       SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param       SCRIPT_NAME /index.php;
    fastcgi_index       index.php;
    include             fastcgi.conf;
    fastcgi_pass        php-fpm;
}

location ~ ^/app/([a-z-]+)(/.*)?$ {
    try_files           $uri
                        /app/$1/index.php$is_args$args
                        =404;
}
当我导航到大多数URL时,一切正常,主应用程序前端控制器被执行,我得到了预期的结果。当我导航到一个不存在的应用程序时,我会从nginx获得
404notfound
,这是意料之中的。但当我导航到其中一个应用程序时,浏览器会下载应用程序前端控制器

root                    /my/web/root;

location / {
    try_files           $uri
                        /$server_name$uri
                        /shared$uri
                        /index.php$is_args$args;
}

location ~ [^/]\.php(/|$) {
    disable_symlinks    off;
    fastcgi_split_path_info ^(.+\.php\b)(.*)$;
    fastcgi_param       SERVER_NAME $host;
    fastcgi_param       PATH_INFO $fastcgi_path_info;
    fastcgi_param       SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param       SCRIPT_NAME /index.php;
    fastcgi_index       index.php;
    include             fastcgi.conf;
    fastcgi_pass        php-fpm;
}

location ~ ^/app/([a-z-]+)(/.*)?$ {
    try_files           $uri
                        /app/$1/index.php$is_args$args
                        =404;
}
触发下载的URL:
/app/my app/
(存在)
404s的URL:
/app/foo/
(不存在)

执行的URL:
/foo
.php
文件需要由
位置~[^/]\.php(/|$)
块处理。您有一个通用的文档根,这使事情变得更简单

但是,关于
位置
指令

您将看到正则表达式位置按顺序被视为,第一个匹配位置将用于处理请求


简而言之,如果希望正确处理
.php
文件,则需要将
位置~[^/]\.php(/|$)
放在任何其他冲突的正则表达式位置之前

尝试将php的位置设置为
location~[^/]\.php(/|$)
行为无变化。显式
../app/index.php
URL执行,隐式
../app/
URL下载,非app URL执行。您上一个
try\u文件
指令中有错误。移除
=404
/app/$1/index.php$is_args$args
元素必须是行中的最后一个元素。请参阅以了解详细信息。有关为什么
=404
会破坏东西的更多信息:在“当前上下文”中提供列表中的“第一个找到的文件”。对于
/app/my app
,该上下文是
位置^/app/([a-z-]+)(/.*)$
块,它不处理PHP-因此nginx发送原始
/app/my app/index.PHP
源文件。但是,try_文件列表中的最后一项被重定向到。当
/app/$1/index.php
是最后一个时,它被重定向到
位置~[^/]\.php(/| s)
块,该块处理php-因此在删除
=404
后,my app front控制器运行。