怎么在 localhost 下访问多个 Laravel 项目?

比如 像这样

localhost/laravel1/public
localhost/laravel2/public

我在nginx 的是这样配置的

server {
    listen       80;
    server_name localhost;
location /laravel2/public {
        try_files $uri $uri/ /index.php?$query_string;
index index.html index.htm index.php;
    }
    location /laravel1/public {
        try_files $uri $uri/ /index.php?$query_string;
index index.html index.htm index.php;
    }
    sendfile off;

    client_max_body_size 100m;

    include fastcgi.conf;
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

}   

但这样似乎不工作,考虑在laravel 的route中放置一个前置事件,对 url解析成laravel可以识别的形式,只是有这个想法,不知道可行不可行,如有遇到相似问题,请不吝赐教,在此多谢了。
这个问题可以转换成,如何在一个域名下配置多个laravel项目

Make everything simple instead of making difficulties as simple as possible
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 37

虚拟站点了解一下

7年前 评论
jcc123

@FMW 我想你曲解了我的意思,我想实现的是一个虚拟站点下,运行多个laravel项目

7年前 评论
No_Panic

@jcc123 谁来做区分不同项目这个工作?

7年前 评论
jcc123

@No_Panic 没有 get 到你的意思

7年前 评论
No_Panic

你还是用个本地的host,比如admin.host.test 和www.host.test来做区分吧

7年前 评论
jcc123

花费我一下午的时间,终于找到配置nginx的方法了,看来nginx之路,还有好长要走。
一个域名支持多个laravel项目 ,就是这么简单

location ^~ /laravel {
    alias /var/www/laravel/public;
    try_files $uri $uri/ [@laravel](https://learnku.com/users/1256);

    location ~ \.php {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include /etc/nginx/fastcgi_params;
    }
}

location [@laravel](https://learnku.com/users/1256) {
    rewrite /laravel/(.*)$ /laravel/index.php?/$1 last;
}
7年前 评论
jcc123

还是粘张图片吧 被转义了

file

7年前 评论
ruke

和虚拟目录一个意思

7年前 评论

在 Nginx 中可以針對每個二級目錄設不同 root,我想可以達到樓主想要的效果
參考:https://zhangge.net/5054.html

7年前 评论

@jcc123 最近我也遇到一个这个问题 求教下第一个laravel项目的文件放在哪里 ( .conf文件的root配置为那个项目的位置?)?

7年前 评论
jcc123

@Icharle root 根目录,取决于你想指向哪个项目。
当然你也可以不配置root根目录,直接用 xxx.domain/project/ 去访问你的项目。

file

7年前 评论
你看我吊吗啊

换端口呗 一个端口一个项目,

7年前 评论

@jcc123 你好 我按照你配置的文件进行配置发现确实是可以 但是laravel这个是我想要访问的文件(用于区分不同的项目) ,但是xxx.domain/laravel/ 访问我的项目 ,接着是我想访问laravel项目的路由 比如(xxx.domain/laravel/order/这个是想要的结果 但是结果跳转的时候是xxx.domain/order/) 感觉应该是重写规则有点问题

7年前 评论
jcc123

@Icharle

 index index.html index.htm index.php;

这个配置没?

7年前 评论
jcc123

@Icharle 上面的那张图片可能会产生歧义,照着这个配置理解一下

file

7年前 评论

有配置

server {
  listen 80;
  server_name xxxxx.cn;
  access_log /data/wwwlogs/xxxxx.cn_nginx.log combined;
  index index.html index.htm index.php;
   location ^~ /laravel/ {
        alias  /home/web/xxxxx.cn/public/;
        try_files $uri $uri/ [@laravel](https://learnku.com/users/1256);

        location ~ \.php$ {
                fastcgi_pass unix:/dev/shm/php-cgi.sock;
                fastcgi_index index.php;
                #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param SCRIPT_FILENAME $request_filename;

                include fastcgi_params;
        }
    }

   location [@laravel](https://learnku.com/users/1256) {
             rewrite /laravel/(.*)$ /laravel/index.php?/$1 last;
   }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    expires 30d;
    access_log off;
  }
  location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
  }

  location ~ /\.ht {
    deny all;
  }

这个是我的配置文件

7年前 评论

@jcc123 是的 这个我注意到了 上面是我的配置文件

7年前 评论
jcc123

@Icharle 把下面的配置,在外层也放置一次。

  location ~ \.php$ {
                fastcgi_pass unix:/dev/shm/php-cgi.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                #fastcgi_param SCRIPT_FILENAME $request_filename;

                include fastcgi_params;
        }
7年前 评论
Shuyi

不知道你用的什么系统, 不过 博客:Fedora 下,如何快速设置本地环境(简单快速暴力法) , 这个应该能帮到你

6年前 评论

不行啊,根本不行啊.

file
两个路由 mi和mi/abc
一个404
一个啥都不返回

6年前 评论

我这边是直接报错file not found

6年前 评论

这是报错信息

6年前 评论

这个是配置

6年前 评论
jcc123

@coffeemilk 先别着急,稍候我出个线上demo

6年前 评论
jcc123

@coffeemilk
project1 末尾带 /
http://multi.jc91715.top/project1/

图片

project2 末尾带 /
http://multi.jc91715.top/project2/

图片

目录结构

multi/
├── project1
│   ├── app
│   ├── bootstrap
│   ├── config
│   ├── database
│   ├── public
│   ├── resources
│   ├── routes
│   ├── storage
│   ├── tests
│   └── vendor
└── project2
    ├── app
    ├── bootstrap
    ├── config
    ├── database
    ├── public
    ├── resources
    ├── routes
    ├── storage
    ├── tests
    └── vendor

naginx配置

server {
    listen 80;

    server_name multi.jc91715.top;

    index index.html index.htm index.php;
    charset utf-8;

     # 项目1
    location ^~ /project1/ {
        alias /var/www/sites/multi/project1/public/;
        try_files $uri $uri/ @project1;
        location ~ \.php$ {
            fastcgi_pass  unix:/run/php/php7.1-fpm.sock;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME  $request_filename;
            include        fastcgi_params;
        }
    }
    location @project1 {
        rewrite /project1/(.*)$ /project1/index.php?/$1 last;
    }

    # 项目2
    location ^~ /project2/ {
        alias /var/www/sites/multi/project2/public/;
        try_files $uri $uri/ @project2;
        location ~ \.php$ {
            fastcgi_pass   unix:/run/php/php7.1-fpm.sock;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME  $request_filename;
            include        fastcgi_params;
        }
    }
    location @project2 {
        rewrite /project2/(.*)$ /project2/index.php?/$1 last;
    }

    access_log /var/log/nginx/multi.jc91715.top-access.log;
    error_log  /var/log/nginx/multi.jc91715.top-error.log error;

    sendfile off;

}

睡觉了,有问题请留言,有点发烧

6年前 评论
lucky_ss 6年前
coffeemilk 6年前
coffeemilk 6年前
jcc123 (作者) (楼主) 6年前
coffeemilk 6年前
hareluya

哎。。。
不多说上code吧。

set $branch www.abcd.com;
if ($request_uri ~ "/tools/") {
set $branch tools.abcd.com;
}
root /sites/$branch/public;

其实这个配置存在已经3年多了....

6年前 评论
puzzle9 4年前

这是我最后换的一种方法

6年前 评论

第一个server是里面的主项目,不需要加前缀,后面的项目需要加上你命名前缀。

6年前 评论

为什么我的不行,爆403

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!