php教程- yii nginx下页面404问题解决方案

原因;

1、原来的网站在wamp环境下搭建完成,一切正常,上传到虚拟主机环境为lnmp,结果访问时可以打开主页,然后点其他页面全部报404错误;

2、经分析得出原因:原网站环境为wamp使用了伪静态,伪静态规则写在网站根目录的.htaccess文件中,Apache下默认识别此文件内容,而Nginx服务器不识别.htaccess文件,导致伪静态规则无效,自然无法解析url地址,导致404错误(文件不存在)

遇到这个问题,网上搜索,一大堆,我总结了下:

法1:

1. Nginx配置
在nginx.conf的server {段添加类似如下代码:

location / {
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}

2. 在Yii的protected/conf/main.php去掉如下的注释

‘urlManager’=>array(
‘urlFormat’=>’path’,
‘rules’=>array(
‘<controller:\w+>/<id:\d+>’=>’<controller>/view’,
‘<controller:\w+>/<action:\w+>/<id:\d+>’=>’<controller>/<action>’,
‘<controller:\w+>/<action:\w+>’=>’<controller>/<action>’,
),
),

刷新测试

 

法2:

因为Nginx服务器不识别.htaccess文件的,所以原来写在此文件中的伪静态规则需要转移出来,转移方式有两种:

方法一、如果想保留.htaccess文件,则在linux服务器此目录  /usr/local/nginx/conf/rewrite/ 下建立一个伪静态规则配置文件名字任取,例如:/usr/local/nginx/conf/rewrite/my.conf,将原来在.htaccess文件中的rewrite规则转换成nginx下的rewrite规则,提供一个自动转换网址

location / {

if (!-d $request_filename){
set $rule_0 1$rule_0;
}
if (!-f $request_filename){
set $rule_0 2$rule_0;
}
if ($rule_0 = “21”){
rewrite ^/(.*)$ /index.php/$1 last;
}

}