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 到底该怎么配置?
1
tntsec OP 一年过去了,没人告诉我
|
2
sunyang 2015-10-04 09:56:36 +08:00
一年过去了,你还没弄懂啊?
|
3
Roope 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 |
4
tntsec OP @Roope 官方文档是 13 年的,我的配置文件里的第一种方法是 typecho 开发者 70 自己写的 http://www.l4zy.com/posts/configure-nginx-to-support-php-pathinfo.html
第二种是我百度后找到的 不过都跟官方的完全不同,都可以用 cgi.fix_pathinfo 这条也完全没有开启过 |
5
Roope 2015-10-04 10:31:11 +08:00
|
6
fengjianxinghun 2015-10-04 12:07:25 +08:00 via iPad
加一个记号。。
|
7
xiqingongzi 2015-10-04 15:52:59 +08:00
我原来试过。完全不开 Pathinfo
把伪静态配置好。效果一样的 |
8
tntsec OP @xiqingongzi 似乎是有这个问题,所以我也不知道我当前到底有没有开启 Pathinfo
|
9
MaiCong 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; } |
10
MaiCong 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; } |
11
tntsec OP @MaiCong 你的这个实测没有出现路径重复和 404 ,应该是标准答案
不过 location ~ ^(.+\.php)(.*)$ 和 location ~ [^/].php(/|$) { 这有什么区别 |
13
xiqingongzi 2015-10-04 22:26:26 +08:00 via Android
@tntsec 后来再装就直接调用伪静态。。。懒得开 Pathinfo 了
|