index.php上传到服务器找不到站点,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而不设置路由,我之前就是因为没有设置路白白浪费了很多时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值