一出自导自演的301问题全程剖析

前言

在一个与客户合作的项目中,需要提供一个回调地址,第一时间接收最新状态。习惯性的提供了一个RESTful风格的URL地址,形如 https://xxx.xxx.com/callback/test (callback模块集成了多个类型的回调)。从第一步在浏览器打开访问测试返回OK后,便一步一步进入了自己埋的深坑…

剧情1——部署&测试

当时仓促提供回调地址后,便在服务端apache配置如下:

  1. apache 回调项目目录下新建文件夹 test;
  2. test目录下新建入口文件index.php,返回“OK”;
  3. 浏览器访问 https://xxx.xxx.com/callback/test 返回 OK,由此确认没问题。(仔细观察,此时url其实已经是 https://xxx.xxx.com/callback/test/,多了斜杠 / )。

剧情2——联调

前期工作都做好后,在项目拉通测试时,能收到回调请求,但始终没有body参数,查看apache 请求log,发现始终有一条301的记录,然后才是正确的log,但已不是要求的POST方式,而是GET。

剧情3——查错

没有一个程序猿一开始就会怀疑自己代码问题,我们一致认为是对方请求问题,从未认真去探讨301的问题。后来拿了对方的请求代码,模拟后,才发现确实有问题,始终返回如下图错误:301永久重定向

  1. 重新部署代码,去除test目录,在callback目录下新建index.php,并配置.htaccess,隐藏index.php。再使用脚本测试,不再出现301的问题,然而出现了新的问题
    重新部署后的报错截图
    apache error_log 错误如下:

[Sun Apr 14 10:37:57 2019] [error] [client 118.113.12.24] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use ‘LimitInternalRecursion’ to increase the limit if necessary. Use ‘LogLevel debug’ to get a backtrace.

  1. 百度后发现是.htaccess 配置的问题,引用配置片段如下;

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

改为如下后却正常

RewriteRule ^(.*)$ /callback/index.php/$1 [QSA,PT,L]

  1. 真是丈二和尚摸不着头脑,也感慨学艺不精,我们另一套系统A也是同样的配置方式,为何仅这个不对?百思不得其解。
  2. 冷静下来后,便从配置上查看二者区别,最终锁定问题根源,ssl.conf配置的DocumentRoot的缘故,该参数配置的目录正式A系统项目目录,而回调callback和A项目目录同级,将callback目录mv到A目录后,一切OK。结论如下:

DocumentRoot代表根目录,用于指定一种URL映射的根目录路径,如http://localhost。
Directory代表项目目录及基本属性,用于指定URL路径在后续的请求中可以进行操作的权限范围属性

剧终——总结

  1. 任何时候不要太盲目自信,严谨、谦逊,出现问题先从自己身上找原因;
  2. 不能永远停留在表面,学艺不可知其然不知其所以然,短时间不出问题是侥幸,很难长远;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值