今天把一个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;
}
文章链接: http://jsoo.cc/820168.html
创作共享: 「署名 4.0 国际」许可协议进行许可~>_<
这是我参考宝塔面板的配置:
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;