我们有一个运行PHP-FPM和NGINX的网站。 应用程序向使用40个字符的随机string键入的网站成员发送邀请(仅限字母数字 – 下面的示例)。 今天我们第一次遇到这个问题。 以下url:
http://oursite.com/notices/response/approve/1960/OzH0pedV3rJhefFlMezDuoOQSomlUVdhJUliAhjS
正在返回一个404错误。 这种url格式已经工作了6个月,现在没有问题,其他url继续正确parsing。 我们有一个非常基本的configuration,一个简单的redirect到一个前端控制器,其他一切现在已经运行良好。
另外,如果我们将最后一个字符从“S”改为小写“s”以外的任何字符,404错误并且站点正确地处理请求,所以我想知道是否有某个安全模块可能会看到错误的具体string…不知道这是否有道理。
我们不确定在哪里寻找具体是什么导致问题,所以任何方向将不胜感激。
谢谢!
更新:在URL的末尾添加一个斜线,可以正确处理它…仍然希望能够深入到问题的底部。
解决:问题是由我的configuration的一部分引起的…意识到我应该张贴,但是出城,没有机会。
任何以“css”或“js”结尾并且不一定以点为前缀的URL(例如, http://site.com/response/somerandomestringcss )被解释为对文件的请求,并且请求是不通过前端控制器路由。 问题是我的正则expression式禁用日志logging,并在jpgs,gifs,icos等设置过期标题
我replace了这个:
location ~* ^.+(jpg|jpeg|gif|css|png|js|ico)$ {
有了这个:
location ~* \.(jpg|jpeg|gif|css|png|js|ico)$ {
而现在以css,js,png等结尾的url都是通过前端控制器正确路由的。 希望能帮助别人。
从OP:
这是configuration文件的问题; 我有条件地设置到期头和禁用图像,js,css,ico文件等日志logging我有:
location ~* ^.+(jpeg|jpg|gif|css|png|js|ico)${并将其更改为:
location ~* \.(jpeg|jpg|gif|css|png|js|ico)${现在,当我请求一个以这些string之一结尾的URL时,它会将其parsing为一个url,而不是一个文件,所以不会再出现404错误。
也许你的URL正则expression式不包括正确的方式大写字符。 你可以在这里发布吗?