nginx 1.9
server 里针对 php 的 伪静态 配置,这个实际使用倒是没问题
 if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php$1 last;
        }
这是现在的 location 配置
location ~ [^/].php(/|$) {
fastcgi_split_path_info ^(.+?.php)(/.*)$;
fastcgi_pass unix:/dev/shm/fpm-cgi.sock;
        fastcgi_index index.php;
        fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/:/proc/";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        }
之前的配置
location ~ ..php(\/.)*$ {
fastcgi_pass unix:/dev/shm/fpm-cgi.sock;
        fastcgi_index index.php;
        fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/:/proc/";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        }
都没有问题,可以正常运行 typecho 程序,所以 pathinfo 到底该怎么配置?
|  |      1tntsec OP 一年过去了,没人告诉我 | 
|  |      2sunyang      2015-10-04 09:56:36 +08:00 一年过去了,你还没弄懂啊? | 
|      3Roope      2015-10-04 10:09:54 +08:00 在 Typecho 官方的文档上已经给出了详细的配置方法。 无法登录后台,点击前台链接或者后台登录时出现"404, not found" 这是 nginx 的设置时没有注意支持 pathinfo 导致的,具体关于 php pathinfo 的信息可以在网上搜索到。 解决方法 一般的出现这种情况时,nginx.conf 里的的 location 设置都是类似这样 location ~ .*\.php$ 要支持 pathinfo ,要改成 location ~ .*\.php(\/.*)*$ 然后在 location 里加上 set $path_info ""; 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; 在某些老版本的 php 里面,可能还要打开 php.ini 里的 cgi.fix_pathinfo cgi.fix_pathinfo = 1 | 
|  |      4tntsec OP @Roope 官方文档是 13 年的,我的配置文件里的第一种方法是 typecho 开发者 70 自己写的 http://www.l4zy.com/posts/configure-nginx-to-support-php-pathinfo.html 第二种是我百度后找到的 不过都跟官方的完全不同,都可以用 cgi.fix_pathinfo 这条也完全没有开启过 | 
|      5Roope      2015-10-04 10:31:11 +08:00 | 
|      6fengjianxinghun      2015-10-04 12:07:25 +08:00 via iPad 加一个记号。。 | 
|  |      7xiqingongzi      2015-10-04 15:52:59 +08:00 我原来试过。完全不开 Pathinfo 把伪静态配置好。效果一样的 | 
|  |      8tntsec OP @xiqingongzi 似乎是有这个问题,所以我也不知道我当前到底有没有开启 Pathinfo | 
|      9MaiCong      2015-10-04 16:19:08 +08:00 Nginx 加上这两句就行了: fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; 例如这样配置: location ~ .*\.php$ { fastcgi_pass unix:/dev/shm/php-fpm.sock; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param DOCUMENT_ROOT /home/wwwroot/example$subdomain; fastcgi_param SCRIPT_FILENAME /home/wwwroot/example$subdomain$fastcgi_script_name; include fastcgi_params; try_files $uri = 404; } | 
|      10MaiCong      2015-10-04 16:22:59 +08:00  1 修改为楼主的配置,就是: location ~ ^(.+\.php)(.*)$ { fastcgi_pass unix:/dev/shm/fpm-cgi.sock; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/"; include fastcgi_params; } | 
|  |      11tntsec OP @MaiCong 你的这个实测没有出现路径重复和 404 ,应该是标准答案 不过 location ~ ^(.+\.php)(.*)$ 和 location ~ [^/].php(/|$) { 这有什么区别 | 
|  |      13xiqingongzi      2015-10-04 22:26:26 +08:00 via Android @tntsec 后来再装就直接调用伪静态。。。懒得开 Pathinfo 了 |