关于ThinkPHP重写URL的一些事
背景:这是一个月黑风高的夜晚,电脑屏幕闪闪发光,他,满脸阴沉,眉头紧锁。
我用的是ThinkPHP 3.1.3 的版本。在本地调试自己的程序,完全没有问题;上传到服务器,却只能访问首页。访问其他页面的时候,出现 **404 NOT FOUND (nginx)**的错误。也就是服务器找不到文件。
造成这个问题的原因是,某些版本的nginx不支持PATH_INFO模式。要想能正常访问就得重写路由。主要有两个步骤,缺一不可。
**1.开启ThinkPHP路由的REWRITE模式。**
这是比较容易忽视的地方。我当时就是忽视了这里, 白白浪费了很多时间。开启REWRITE模式很简单,只需在你的项目配置文件中加如下代码:
'URL_MODEL' => 2,
默认情况下 URL_MODEL 为 1,默认情况下使用PATHINFO模式。0为普通模式,采用传统的URL传参模式。2为rewrite模式,重写URL时必须设置为rewrite。3为兼容模式,是传统传参和PATHINFO的结合。
2.重写URL
在服务器中打开nginx的配置文件。
以我自己的博客为例:
`sudo vi /etc/nginx/conf.d/jianghang.name.conf`
然后添加如下代码:
location / {
//...省略部分代码
if(!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
如果项目文件在二级目录的话,就得修改一下路径。代码如下,yourdomai是项目二级目录名称:
location /yourdomin/ {
// …..省略部分代码
if (!-e $request_filename) {
rewrite ^/yourdomin/(.*)$ /index.php?s=$1 last;
}
如果只是重写了路由,而不开启ThinkPHP路由的REWRITE模式,则会出现“***无法加载
index.php模板”的错误。这时候你将URL地址中的 /index.php* 去掉就会发现可以正常访问了。所以重写路由的时候,得先开启路由重写模式。
**3.下一步,重启nginx**
sudo /etc/init.d/nginx restart
不出意外的话,就没问题啦。
**4.something else**
不会使用vim? 那再贴几个简单的使用命令:
a 进入insert 模式,这个时候才可以进行编辑;
esc 退出insert 模式;
: 进入控制台
: q 退出
:wq 保存并退出。
更多的就自行百度吧...
最后,欢迎关注我的个人主页 http://jianghang.name啦啦啦