ThinkPHP上传到服务器出现404,未找到index.php模板等问题

问题:代码在本地写好之后,传到服务器,首页能正常加载,但无法加载任何控制器,无法加载其他页面。

nginx 的错误代码为 404 not found

问题举例:我之前做的是自己的一个博客
能够直接访问 http://blog.jianghang.name    也能够通过 http://blog.jianghang.name/Index/Index/index     进行访问;

但 通过http://blog.jianghang.name/index.php/Index/Index/index 就无法访问了,错误提示是无法加载index.php模块。

造成这个错误的原因,可能是有的低版本的nginx不支持path_info(总感觉这个原因有点说不过去,还请高手指出)。解决方法就是重写URL,隐藏  URL中的 index.php。


1.开启ThinkPHP路由模式

在ThinkPHP的配置文件conf.php中加入

‘URL_MODEL’ => 2,

默认情况下 URL_MODEL 为 1,默认情况下使用PATHINFO模式。0为普通模式,采用传统的URL传参模式。2为rewrite模式,重写URL时必须设置为rewrite。3为兼容模式,是传统传参和PATHINFO的结合。

2.在nginx配置文件中重写URL

参考TinkPHP手册,将下面的代码加到 xxxxx.conf 中。xxxx.conf是你的项目的nginx配置文件。

 location / { 
    // …..省略部分代码
    if (!-e $request_filename) {
    rewrite  ^(.*)$  /index.php?s=$1  last;
    break;
     }
 }

如果项目文件是在二级目录的话,就得改一下路径。代码如下,yourdomin是二级目录的名字

 location /youdomin/ { 
    // …..省略部分代码
    if (!-e $request_filename) {
    rewrite  ^/yourdomin/(.*)$  /index.php?s=$1  last;
     }
 }

然后重启nginx。不出意外问题就解决了。

3.something else

除了可以参考手册进行URL重写,也可以自己写规则隐藏index.php。但还是首先推荐参考手册,因为自己写的话,如果是新手可能会出现一些问题。隐藏index.php的代码比如:

location / {
        //...省略部分代码
        if (-f $request_filename/index.php){
                rewrite (.*) $1/index.php;
        }
        if (!-f $request_filename){
                rewrite (.*) /index.php;
        }
}


提示:千万不能只rewrite而不设置路由,我之前就是因为没有设置路白白浪费了很多时间。




转载于:https://my.oschina.net/jianghang/blog/300774

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值