Thinkphp在Apache、Nginx和Caddy的伪静态重写规则

2019年10月9日 118

背景

我最近在寻找、尝试 thinkphp 在 nginx 或者 caddy 下面的rewrite 重写规则。

我寻找了很久,一直没找到。只好自己读文档,解决了。

答案来之不易。特记在此,拿走不谢。

起因

thinkPHP 是一个国产的PHP框架。

因为是PHP框架,所以其定义了一个统一的网站入口,导致页面的链接地址格式很复杂。

thinkPHP 提供了 URL_MODEL供用户设置URL格式,取值为0至3:

0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 默认为PATHINFO 模式

如果设置了URL_MODEL => 2,在web服务器的配合下,网页的链接地址是最美观的。但是,这个过程,需要在 web 服务器上设置对应的 rewrite 重写规则。

Apache 的rewrite规则

apache 是老牌的web 服务器。我首次使用 apache 的时候,深圳的房价才一两千元/平方米。

在网站目录下放置 .htaccess文件,内容为:

 <IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

其中:

第一行RewriteCond %{REQUEST_FILENAME} !-d表示针对于不是文件夹的情况,

第二行RewriteCond %{REQUEST_FILENAME} !-f表示不是文件的情况;

满足这两种情况的链接,就适用RewriteRule这条重写规则,QSA表示把参数自动附加到后面。

Nginx 的rewrite重写规则

Nginx 是后起之秀,我使用ngxin的时候,深圳的房价已经三四万一平方米了。

其配置方式吸取了 apache 的精华并做了一些简化。例如,nginx不需要指定QSA,因为nginx 本身就默认如此了。

nginx的重写规则就简单多了:

location / {
        try_files $uri $uri/ /index.php?s=$1;
    }
这规则的意思是:对于用户访问的链接地址,首先作为文件地址uri访问,如果文件不存在就作为目录uri/访问,如果还不满足就适配到/index.php?s=$1

在这里,$1等效于$uri,所以,thinkphp在nginx 的重写规则也可以写为:

location / {
        try_files $uri $uri/ /index.php?s=$uri;
    }
caddy 的重写规则

caddy 是更年轻的web服务器。我使用caddy的时候,深圳房价已经五六万一平方米了。

caddy 的优点在于,能够自动申请ssl证书,从而使网站能启动https。

thinkphp在caddy的重写规则是:
 rewrite {
to {path} {path}/ /index.php?s={uri}
}

1:如非特殊说明,本站对提供的源码不拥有任何权利,其版权归原著者拥有。请在下载后24小时之内自觉删除。
2:该资源只为研究、学习所提供,任何涉及商业盈利目的均不得使用,若需要,请购买正版,否则产生的一切后果将由您自己承担,与本站无关!
3:本网站所有资源均为作者提供和网友推荐收集整理而来,不保证其完整性以及安全性。如有侵犯你版权的,请来信(邮箱:lwvip_com@qq.com)指出,本站将立即改正。
本文地址:老巫源码 » Thinkphp在Apache、Nginx和Caddy的伪静态重写规则

全屏

切换