需求

本来我们一般情况下都是域名abc.com解析到网站的根目录/root/public这种。但是客户突然提出了一个奇葩的需求,客户要求以后可能网站会增多,需要增加分区的功能,比如abc.com/wh/代表武汉的网站,abc.com/sy/代表沈阳的网站,如果打开域名会自动跳到某一个分区网站。

过程

1.路由转发

因为我用的框架是thinkphp5.0,有一个定义路由的功能,可以以路由的形式改变url然后达到转发的效果。但是因为网站整个搬过去的时候已经完工了,这个时候修改路由会导致整个网站所有的url发生变更,工作量很大。没有一个工程师愿意接这个活,所以只能想到服务器转发,于是开始探索服务器转发这个路子。

2.nginx重定向

然后想到了用nginx重定向的功能rewrite将请求到根目录的请求全部转发到分区/wh/中去,然后匹配/wh/的分区location,进行解析这个网站。但是很不幸,因为定义了根目录的原因,thinkphp5直接将/wh/解析成了一个模块,然后就会报错找不到wh这个模块,资源加载也会自动j加上/wh/会导致所有资源加载不出来。其实是因为请求转发的时候解析有问题导致thinkphp5.0将/wh/解析成模块了


后来在百度之后吸取了教训,修改之后如下

终于能正常转发域名到分区域名下,并且thinkphp5.0也能正常解析,但是资源因为加了/wh/的原因不能正常加载了,如下图

一片红字,所有的资源被转发只有无法正常解析

3.nginx重定向+资源重定向

因为网页已经能正常解析了,加班两天的情况下不舍得放弃这个成果。于是研究这些静态资源该怎么办,后来也是用location转发的功能,让静态资源也能正常加载。如下图

页面可以正常显示了

后记

以为要完工的时候,测试之后发现了一个问题。接口的请求也被转发了,因为rewrite的原因导致post的参数全部丢失,无法获取到正常的数据。后来尝试用了反向代理,但是这样的话地址栏url就不会发生改变,不符合客户的需求。于是继续问人、百度,终于发现一个大佬有过这个经历,转发之后参数丢失。在国外网站上找到了解决办法,用nginx307重定向就解决了问题,经过测试完美解决这个问题。如下图

这个时候接口也能请求了,然后完工。

感谢

感谢严总、凯哥、卫哥的支持,帮忙提供了意见才想到了这个解决方案,谨以此记。

nginx分区域名转发 tp5域名分目录配置的更多相关文章

  1. nginx 同一域名下分目录配置显示php,html,资源文件

    安装上nginx后 注意后nginx.conf 中的这么几行 error_log /var/log/nginx/error.log;  日志,这个很有用 include /etc/nginx/conf ...

  2. .net排坑篇:负载均衡域名转发的背后

    背景 昨天因客户私有部署问题,需要到客户公司去排查问题. 他们是一家外企,各种权限需要提前申请(最大的坑).他们之前部署的一般为单域名,很少部署互联网类型多个域名的情形(第二个坑).这次私有部署总计使 ...

  3. nginx安装配置域名转发

    1.安装pcre 1.[root@localhost home]# tar zxvf pcre-8.10.tar.gz //解压缩 2.[root@localhost home]# cd pcre-8 ...

  4. Nginx配置域名转发实例

    域名:cps.45wan.com   所在阿里云主机:123.35.9.12 45wan没有在阿里云备案 67wan已经在阿里云备案 阿里云主机(假如123.35.9.12)上原来的nginx配置: ...

  5. Nginx配置以及域名转发

    工程中的nginx配置 #user nobody; worker_processes 24; error_log /home/xxx/opt/nginx/logs/error.log; pid /ho ...

  6. 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...

  7. 端口被占用通过域名的处理 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...

  8. nginx域名转发

    场景1:因服务器限制,所以只对外开放了一个端口,但是需要请求不同的外网环境,所以在中转服务器上用nginx做了一次转发 实现: server { listen 8051; server_name lo ...

  9. 搭建nginx反向代理用做内网域名转发

    先上一个我的正常使用的配置 location / { proxy_pass http://192.168.1.84:80; proxy_redirect off; proxy_set_header H ...

随机推荐

  1. jenkins构建的robot result结果不更新

    描述:构建的结果不进行更新,仍然显示以往的构建结果 定位原因:pybot 命令中生成的结果文件保存路径与构建后robot结果显示路径不一致所致 解决办法:修改二者的结果保存路径一致

  2. PHP垃圾回收机制防止内存溢出

    PHP语言同其他语言一样,具有垃圾回收机制.那么今天我们要为大家讲解的内容就是关于PHP垃圾回收机制的相关问题.希望对大家有所帮助. 一.PHP 垃圾回收机制(Garbage Collector 简称 ...

  3. 《转》Python学习(15)-对文件的操作(二)

    转自 http://www.cnblogs.com/BeginMan/p/3169020.html 一.文件系统 从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进 ...

  4. Objective-C官方文档 值和集合

    版权声明:原创作品,谢绝转载!否则将追究法律责任. 尽管Objective-c是一个面向对象的语言,是C语言的超集,这意味着你可以用任何标准的C标量(非对象)像int,float,和char在Obje ...

  5. linux prefix

    指定安装路径不指定prefix,则可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc.其它的资源文件放在/usr ...

  6. Java 使用单例模式的注意事项

    某个类使用单例模式实现,如果该类里面含有List或Map等集合,使用时,请注意两点 1. List或Map 等集合使用前,需要判断是否已经数据,调用clear()方法先清除掉 2. List或Map ...

  7. Sencha Touch 实战开发培训 视频教程 第二期 第五节

    2014.4.16 晚上8:20分开课. 本节课耗时没有超出一个小时,主要讲解了Sencha Touch 结合百度地图的用法. 本期培训一共八节,前两节免费,后面的课程需要付费才可以观看. 本节内容: ...

  8. OpenCV获取IP摄像头视频

    从开源中国博客搬来,合并博客 实验室做一个智能小车的小项目,期间涉及到在PC端处理小车摄像头的视频.这里先用安卓手机代替一下进行试验.大致流程就是手机摄像头获取视频,开启一个IP摄像头服务软件,在局域 ...

  9. DragonBones龙骨发布后在Egret中的位置

    DragonBones发布后的动画,加载到Egret中场景中,原点的位置在哪呢? DragonBones中的图片位置 导出 加载到Egret中.可见DragonBones中的图片位置原点左下方(0,0 ...

  10. python nose测试框架全面介绍八---接口测试中非法参数的断言

    在测接口时,会有这样的场景,输入非法的参数,校验返回的错误码及错误内容 通常做法为发请求,将错误的返回结果拿出,再进行对比匹配:但存在一个问题,需要再写错误返回分析函数,不能与之前正常发请求的函数共用 ...