【问题标题】:Laravel Subdomain with Landing Page and Sub projects insideLaravel 子域,里面有登陆页面和子项目
【发布时间】:2020-04-15 13:14:05
【问题描述】:

我正在尝试创建一个带有 php 网站演示链接的登录页面,如下所示:

https://demos.infinitywebservices.tn/ : landing page

https://demos.infinitywebservices.tn/demo1/public : takes to demo1 app 
https://demos.infinitywebservices.tn/demo2/public : takes to demo2 app 

...等等

我在 Debian 9 服务器上使用 Nginx

我的/etc/nginx/sites-available/infinitywebservices.conf

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    root /var/www/tony-projects/infinitywebservices/demos;
    index index.php index.html index.htm;

    server_name demos.infinitywebservices.tn  www.demos.infinitywebservices.tn;

    gzip on;
    gzip_vary on;
    gzip_disable "msie6";
    gzip_comp_level 6;
    gzip_min_length 1100;
    gzip_buffers 16 8k;
    gzip_proxied any;
    gzip_types
    text/plain
    text/css
    text/js
    text/xml
    text/javascript
    application/javascript
    application/x-javascript
    application/json
    application/xml
    application/xml+rss;     

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    }

    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc|svg|woff|woff2|ttf)\$ {
                expires 1M;
                access_log off;
                add_header Cache-Control "public";
    }

    location ~* \.(?:css|js)\$ {
                expires 7d;
                access_log off;
                add_header Cache-Control "public";
    }

    ssl_certificate /...; # managed by Certbot
    ssl_certificate_key /...; # managed by Certbot
}

我的目录结构

/var/www
      |__tony-projects
               |__infinitywebservices
                           |__demos
                                |__ index.php (Landing page for demos.infinitywebservices.tn/)
                                |__ demo1 (Laravel Project)
                                |__ demo2 ...
                                |
                                |..... 

附言

  1. 我目前在demo1 下使用默认的.htaccess 配置和 demo2 Laravel 项目
  2. 目前只有主页有效在我尝试访问子网站时 像https://demos.infinitywebservices.tn/demo1/public/ 这样的项目(参见:https://demos.infinitywebservices.tn/laravel-test/public

  3. 但是对于 https://demos.infinitywebservices.tn/laravel-test/public/test (路线测试存在),我得到404 Not Found nginx/1.10.3

我在这里缺少什么?

【问题讨论】:

  • 只是指出.htaccess 是用于 apache 而不是 nginx
  • 哦,谢谢你的信息

标签: laravel nginx debian


【解决方案1】:

您需要将所有未知的 URI 传递给应用程序的控制器(例如 /laravel-test/public/index.php),而不是响应 404 状态。

如果您有多个应用程序具有明确定义的目录结构,您可能希望使用正则表达式来提取应用程序的名称(例如laravel-test),以便使用正确的控制器。

例如:

location / {
    try_files $uri $uri/ @rewrite;
}
location @rewrite {
    rewrite ^(/[^/]+/public) $1/index.php last;
}

【讨论】:

  • 感谢您的回答,它适用于像 https://demos.infinitywebservices.tn/laravel-test/public/.... 这样的 Url 但是当我尝试 https://demos.infinitywebservices.tn/laravel-test/{route} 没有 /public 部分时,我得到(403 Forbidden)。见https://demos.infinitywebservices.tn/laravel-test/
  • 您应该更改正则表达式以满足您的特定要求,例如:rewrite ^(/[^/]+)/ $1/public/index.php last; 可能适合您。
  • 不幸的是,它对我不起作用,这 config 已安装。我怎么能按照你的建议使用正则表达式重构这段代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
相关资源
最近更新 更多