安装typecho后404问题的方法

   分类:日常    热度:1949

今天把一个WordPress站点换成typecho,安装过程很顺利,也提示安装成功。
但是打开首页的文章页面或者关于页面,或者在后台界面输入账号密码点击登录,都报404 Not Found错误。
网上找了一些方法,比较复杂,先要改nginx里的站点配置文件,然后还要改pathinfo.conf配置文件,关键是改了还没有效果!
后来根据某篇文章的启发,出现404是因为typecho需要pathinfo,然后看了下站点的nginx配置文件,发现添加vhost事LNMP自动生成的nginx配置文件里,下面这句已经提醒怎么修改了:

#comment try_files $uri =404; to enable pathinfo

意思是:如果想要启用pathinfo,需要注释掉“try_files $uri =404;”这行代码。
所以,LNMP1.1安装typecho后404问题解决办法就是:
在/usr/local/nginx/conf/vhost/下找到你的typecho站点配置文件(文件名类似xxxxx.conf),然后:
1、确保有“include typecho.conf;”这么一行,并且没有被“#”号注释;
2、用“#”号注释“try_files $uri =404;”这一行;
3、取消“#include pathinfo.conf;”这一行前面的的“#”号;
修改正确的话,typecho站点conf配置文件看起来如下:

include typecho.conf;  
#error_page   404   /404.html;  
location ~ [^/]\.php(/|$)  
    {  
        # comment try_files $uri =404; to enable pathinfo  
        #try_files $uri =404;  
        fastcgi_pass  unix:/tmp/php-cgi.sock;  
        fastcgi_index index.php;  
        include fastcgi.conf;  
        include pathinfo.conf;  
    }
发表新评论
  1. 发起冲刺的蜗牛

    这是我参考宝塔面板的配置:
    nginx配置pathinfo模式,解决访问404
    什么是pathinfo?

    pathinfo是PHP的一个函数

    pathinfo() 函数以数组或字符串的形式返回关于文件路径的信息。
    返回的数组元素如下:
    [dirname]:返回文件路径中的目录部分
    [basename]:返回文件路径中文件名的部分
    [extension]:返回文件路径中文件的类型的部分

    pathinfo模式就是www.test.com/index.php/aa/BB/cc,访问aa模块下BB控制器的cc方法.兼容模式就是普通的模式加s=/参数/或者m=model&a=action这样的 各个开发框架都自己特定的格式

    pathinfo模式需要服务器支持,将cgi.fix_pathinfo=1来完成路径信息的获取,但同时会带来安全隐患,需要把cgi.fix_pathinfo=0设置为0,这样php就获取不到PATH_INFO信息,那些依赖PATH_INFO进行URL美化的程序就失效了。

    说了这么多,直接上解决方案:

    直接在虚拟主机配置文件里添加:
    vim /etc/nginx/cond.d/nextcloud.conf
    ......
    location ~ [^/]\.php(/|$)
    {
    root /html/website;
    fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
    include pathinfo.conf;
    }
    ......
    fastcgi.conf的内容如下:
    [admin@local.web ~]$cat /etc/nginx/fastcgi.conf

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;

    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    fastcgi_param REQUEST_URI $request_uri;
    fastcgi_param DOCUMENT_URI $document_uri;
    fastcgi_param DOCUMENT_ROOT $document_root;
    fastcgi_param SERVER_PROTOCOL $server_protocol;
    fastcgi_param REQUEST_SCHEME $scheme;
    fastcgi_param HTTPS $https if_not_empty;

    fastcgi_param GATEWAY_INTERFACE CGI/1.1;
    fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

    fastcgi_param REMOTE_ADDR $remote_addr;
    fastcgi_param REMOTE_PORT $remote_port;
    fastcgi_param SERVER_ADDR $server_addr;
    fastcgi_param SERVER_PORT $server_port;
    fastcgi_param SERVER_NAME $server_name;

    # PHP only, required if PHP was built with --enable-force-cgi-redirect
    fastcgi_param REDIRECT_STATUS 200;

    pathinfo.conf内容如下:
    [admin@local.web ~]$cat /etc/nginx/pathinfo.conf
    set $real_script_name $fastcgi_script_name;
    if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
    set $real_script_name $1;
    set $path_info $2;
    }
    fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
    fastcgi_param SCRIPT_NAME $real_script_name;
    fastcgi_param PATH_INFO $path_info;

    回复