Caddy 网页不存在时自动重写index.php问题解决方案

在这个到处都是HTTPS的时代,Caddy的自动HTTPS、配置简单等特点,使其迅速普及,大有超越nginx之势。笔者在使用Caddy的过程中发现,当Caddy与PHP配合使用时,就会出现一个奇怪的现象,那就是当网页不存在时,Caddy会自动导向index.php(不是重定向,而是重写。重定向会导致浏览器网址栏路径变化,而重写不会,用户输入啥就是啥)。

一般情况下,这种缺省设定也没啥不好的,至少网站就不用处理404错误了,相当于404错误被自动导向了主页。但特殊情况下,如想在主页上做个访问计数时,这个特点就导致访问计数不准了。这种情况下,就需要解决这个问题。

大部分情况下,在Caddy中配置PHP非常简单,只要在Caddyfile中加入下面一句话:

      php_fastcgi * unix//run/php/php-fpm.sock

当希望Caddy不在网页不存在时导向index.php时,上面配置指令就要增加一行内容:

      php_fastcgi * unix//run/php/php-fpm.sock {
               index off
      }

根据Caddy官网介绍,index 用于指示网页不存在时使用的页面,缺省是 index.php。当不需要时,配置为off。这样,当网页不存在时,久违的404错误页面终于回来了。

但是,这样的配置又带来一个副作用:在使用域名访问主页时,也会显示404,而不是自动转向 index.php。这时,就需要再增加一行配置指令,将路径 “/”导向 index.php。

      route  {
             redir  /   /index.php
      }

如果需要将每个目录路径都导向该目录下的 index.php,可以使用下面的配置

      route  {
             redir  /*/     {http.request.orig_uri.path}/index.php
      }

发表评论