怎么在 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 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 37

虚拟站点了解一下

5年前 评论
jcc123

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

5年前 评论
No_Panic

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

5年前 评论
jcc123

@No_Panic 没有 get 到你的意思

5年前 评论
No_Panic

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

5年前 评论
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;
}
5年前 评论
jcc123

还是粘张图片吧 被转义了

file

5年前 评论
ruke

和虚拟目录一个意思

5年前 评论

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

5年前 评论

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

5年前 评论
jcc123

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

file

5年前 评论
你看我吊吗啊

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

5年前 评论

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

5年前 评论
jcc123

@Icharle

 index index.html index.htm index.php;

这个配置没?

5年前 评论
jcc123

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

file

5年前 评论

有配置

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;
  }

这个是我的配置文件

5年前 评论

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

5年前 评论
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;
        }
5年前 评论
Shuyi

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

5年前 评论

不行啊,根本不行啊.

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

4年前 评论

我这边是直接报错file not found

4年前 评论

这是报错信息

4年前 评论

这个是配置

4年前 评论
jcc123

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

4年前 评论
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;

}

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

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

哎。。。
不多说上code吧。

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

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

4年前 评论
puzzle9 3年前

这是我最后换的一种方法

4年前 评论

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

4年前 评论

为什么我的不行,爆403

4年前 评论

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