q666123 发表于 2016-12-28 09:14:06

nginx下实现pathinfo及WordPress、Typecho永久链接(伪静态)


今晚配置了下LNMP环境下的阿里云服务器,将网站(使用的是自己写的BasePHP Beta框架)部署完毕后发现伪静态功能未能启用,才发现原来nginx并不像apache那样可以直接支持pathinfo,因此百度了一下,找到了启用pathinfo的解决方案。

打开nginx.conf配置文件,找到类似如下代码的地方(不同版本的nginx可能稍有不同,但相差不远):


[*]
location~\.php$

[*]
   {

[*]
       #原有代码

[*]
   }


将其改成:


[*]
#去掉$是为了不匹配行末,即可以匹配.php/,以实现pathinfo

[*]
location~\.php

[*]
   {

[*]
       #原有代码

[*]      

[*]
       #定义变量 $path_info

[*]
       set$path_info"";

[*]
       #定义变量 $real_script_name,用于存放真实地址

[*]
       set$real_script_name $fastcgi_script_name;

[*]
       #如果地址与引号内的正则表达式匹配

[*]
       if($fastcgi_script_name~"^(.+?\.php)(/.+)$"){

[*]
         #将文件地址赋值给变量 $real_script_name

[*]
         set$real_script_name $1;

[*]
         #将文件地址后的参数赋值给变量 $path_info

[*]
         set$path_info $2;

[*]
       }

[*]
       #配置fastcgi的一些参数

[*]
      fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;

[*]
      fastcgi_param SCRIPT_NAME $real_script_name;

[*]
      fastcgi_param PATH_INFO $path_info;

[*]
   }


这样,nginx服务器就可以支持pathinfo了。

上面做的是让PHP文件能够接收到pathinfo的参数,那么现在剩下要做的就是要将参数rewrite到单一的入口文件index.php上。在网上搜索了一下WordPress在nginx环境下的固定链接配置方式,发现都比较繁琐,于是直接自己写了一段rewrite规则,加在access_log语句的上方即可:


[*]
#如果请求即不是一个文件,也不是一个目录

[*]
if(!-e $request_filename)

[*]
{

[*]
   #地址作为将参数rewrite到index.php上。

[*]
    rewrite^/(.*)$ /index.php/$1;

[*]
   #若是子目录则使用下面这句,将folder改成目录名称即可。

[*]
   #rewrite ^/folder/(.*)$ /folder/index.php/$1;

[*]}





=======================签 名 档=======================
原文地址(我的博客):http://www.clanfei.com/2012/10/1657.html
欢迎访问交流,至于我为什么要多弄一个博客,因为我热爱前端,热爱网页,我更希望有一个更加自由、真正属于我自己的小站,或许并不是那么有名气,但至少能够让我为了它而加倍努力。。
=======================签 名 档=======================



页: [1]
查看完整版本: nginx下实现pathinfo及WordPress、Typecho永久链接(伪静态)