在子目录

时间:2018-09-12 12:50:02

标签: php laravel nginx config nginx-config

我尝试仅对一个子目录(laravel目录)启用PHP,但是我没有设法使它起作用。 NGINX总是说404 File not found或php说“未指定输入文件”。我在做什么错了?

这是我的位置配置:

        location /laravel {
        root   html/laravel/public;
        index   index.php index.html index.html;
        try_files   $uri $uri/ /index.php?$query_string;

        location ~ \.php$ {
            root   html/laravel/public;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  document_root$fastcgi_script_name;
            #include        fastcgi_params;
            include fastcgi.conf;
         }
     }

UDPATE 1 :似乎nginx无法正确评估我的位置表达式:

  

2018/09/12 16:30:44 [错误] 26476#24408:* 1 CreateFile()“ C:/Server/nginx/html/index.php”失败(2:系统找不到指定的文件),客户端:127.0.0.1,服务器:localhost,请求:“ GET / laravel / HTTP / 1.1”,主机:“ localhost”

这是错误的路径,至少是/位置的根:

   location / {
        root   C:/Server/nginx/html;
        index  index.html index.htm index.php;
    }

我试图移动块,但没有任何变化。

更新2 : 看来nginx的确很容易出错。该文档指出:

  

按指定顺序检查文件是否存在,并使用找到的第一个文件进行请求处理; 该处理是在当前上下文中执行的。文件的路径是根据根和别名指令从file参数构造的。可以通过在名称的末尾指定斜杠来检查目录是否存在。 “ $ uri /”。如果未找到任何文件,则将进行内部重定向到最后一个参数中指定的uri。

如我的错误日志所示,try_files指令不尊重根路径,因为它尝试打开相对于另一个位置块的文件。

2 个答案:

答案 0 :(得分:1)

正如@Richard在链接的Stackoverflow线程中指出的那样,这似乎是nginx的错误。对我而言,此解决方案适用于nginx:

<script runat="server">.....abx xyz... </script>

来源:https://serversforhackers.com/c/nginx-php-in-subdirectory

答案 1 :(得分:1)

可能需要您进行一些更改和更新:

如果您想将laravel项目放在具有subfolder的服务器上的ngnix-ubuntu 16-php.7.2中,那么这里是update ngnix config:

1)您嵌套的(子文件夹)不在主文件夹中

/var/www/main:
/var/www/nested:

然后配置:

location /nested {

        alias /var/www/nested/public;

        try_files $uri $uri/ @nested;

               location ~ \.php$ {
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $request_filename;
                        fastcgi_pass   unix:/run/php/php7.2-fpm.sock;

                                }
   }

location @nested {
        rewrite /nested/(.*)$ /nested/index.php?/$1 last;
}

2)您主目录中的laravel-test文件夹(子文件夹):

/var/www/main:
/var/www/main/nested:

然后配置:

location /laravel-test {

    alias /var/www/main/laravel-test/public;

    try_files $uri $uri/ @laravelTest;

           location ~ \.php$ {
                    include fastcgi_params;
                    fastcgi_param SCRIPT_FILENAME $request_filename;
                    fastcgi_pass   unix:/run/php/php7.2-fpm.sock;

                            }


  }

location @laravelTest {
        rewrite /laravel-test/(.*)$ /laravel-test/index.php?/$1 last;
}