typecho永久链接设置(nginx+php)

      访问: 5,321 次      评论    

伪静态

在WordPress中,固定链接可以采用Rewrite(伪静态),默认使用动态链接。在Typecho中,同样的设置叫做“永久链接”,然而Typecho默认使用了Pathinfo(也就是 http://域名/index.php/文章地址)的链接方式。如果服务器不支持Pathinfo则Typecho可以浏览首页却无法查看文章或者进入后台。如果开启了Typecho的Rewrite,则Typecho的管理后台默认支持自定义伪静态。如图:

新记(2016-02-19):

nginx官方早就推荐使用 try_files 来替代 rewrite 了,贴一个新的推荐设置方法(with cgi.fix_pathinfo=0):

    location / {
        # one line for typecho staticize and with cgi.fix_pathinfo=0 in php.ini more secure
        try_files $uri $uri/ @typecho;
    }
    
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        #try_files $uri @typecho;
        fastcgi_pass 127.0.0.1:9000;
        #include from snippets/fastcgi-php.conf:
        # regex to split $uri to $fastcgi_script_name and $fastcgi_path
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # Check that the PHP script exists before passing it
        try_files $fastcgi_script_name =404;
        # Bypass the fact that try_files resets $fastcgi_path_info
        # see: http://trac.nginx.org/nginx/ticket/321
        set $path_info $fastcgi_path_info;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
    
    location @typecho {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root/index.php;
        include fastcgi_params;
    }


---- 旧文:-----------------------------------------

运行环境:nginx/1.6.0 + PHP/5.4.31

1、php.ini中 cgi.fix_pathinfo=1 时的nginx 配置:

    location / {
            #rewrite rule for typecho staticize
             if (!-e $request_filename) {
                 rewrite ^/(.*)$ /index.php/$1 last;
             }
    }
    location ~ ^.+\.php {
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;     //也可以,但不推荐
            include fastcgi_params;
    }


2、php.ini中 cgi.fix_pathinfo=0 时的nginx 配置:

为了避免PHP CGI 中 fix_pathinfo 引起的安全隐患,现在一般关闭上述php.ini选项。此时nginx的配置:

    location / {
            #rewrite rule for typecho staticize
             if (!-e $request_filename) {
                 rewrite ^/(.*)$ /index.php/$1 last;
             }
    }
    location ~ ^.+\.php {
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
            include fastcgi_params;
    }


参考资料:


添加新评论