nginx 如何让不同得域名来决定是否进入 Laravel index.php

假如说访问 a.com?sharid=123这样得域名访问 让不进入laravel index.php而是直接进入根目录下得index.html 页面,如果访问得地址类似  a.com/aaa/bbb 这样得就让进入index.php,nginx 该如何写这样得伪静态呢,希望大神们能多多指教,谢了

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

估计有两类方法可以达到楼主的目的:
方法1、配置laravel项目的路由;
方法2、使用nginx的location指令,伪代码描述如下:

server {
    server_name a.com;
    location 匹配【/?sharid=一个数字】的时候 {
        try_files /index.html /index.htm;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location 访问的是【.php】页面的时候{
        使用 fastcgi_pass 系列指令对页面进行动态处理
    }
    ... ...
}

其中 a.com?sharid=123 会被浏览器转换成 a.com/?sharid=123 (域名后面多了一个正斜杠)
注意:默认页面为 index.php ,所以不用再多写一个location指令对 /aaa/bbb 做单独判断了

4年前 评论
sanrain (楼主) 4年前
讨论数量: 4
ALMAS

让所有请求都进入index.php,然后在Laravel中做判断进行跳转不可以?

4年前 评论

你这个需求有点怪,不知道你具体要实现什么功能。一般如果需要访问静态文件,可以直接放到 public 目录下,这样就可以直接访问;或者在 resources/views/xxx.blade.php 目录下新建视图文件,把你的静态文件内容写进去,路由

Route::get('/xxx.html', function () {
    return view('xxx');
});

这样也可以实现伪静态

4年前 评论

估计有两类方法可以达到楼主的目的:
方法1、配置laravel项目的路由;
方法2、使用nginx的location指令,伪代码描述如下:

server {
    server_name a.com;
    location 匹配【/?sharid=一个数字】的时候 {
        try_files /index.html /index.htm;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location 访问的是【.php】页面的时候{
        使用 fastcgi_pass 系列指令对页面进行动态处理
    }
    ... ...
}

其中 a.com?sharid=123 会被浏览器转换成 a.com/?sharid=123 (域名后面多了一个正斜杠)
注意:默认页面为 index.php ,所以不用再多写一个location指令对 /aaa/bbb 做单独判断了

4年前 评论
sanrain (楼主) 4年前

如果你的需求是有querystring的时候就跳到index.html没有的话就到index.php的话可以通过$is_args变量进行判断,当有querystring的时候$is_args的值是?,可以用这种方法加if操作

4年前 评论
sanrain (楼主) 4年前

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