首页 » 性感的程序员 » 关于ThinkPHP重写URL的一些事

关于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啦啦啦