资讯中心

Nginx 下 ThinkPHP URL 的 PATHINFO 与 REWRITE

  

在Nginx下,为了支持ThinkPHP的URL_MODE设置为2的模式,需要配置Rewrite规则。下面是具体的配置方法:

  1. 打开Nginx的配置文件(一般是在/etc/nginx/nginx.conf路径下,如果配置了vhost,可以直接打开vhost的配置文件),找到类似如下代码:

 

plaintext
 
location ~ .php {
  # 原有代码
  # 定义变量$path_info,用于存放pathinfo信息
  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了。

 

  1. 在上述配置的access_log语句上方加上以下语句,以实现Rewrite规则:

 

plaintext
 
# 如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
if (!-e $request_filename) {
  # 地址作为将参数Rewrite到index.php上。
  rewrite ^/(.*)$ /index.php/$1;
  # 若是子目录则使用下面这句,将subdir改成目录名称即可。
  #rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
}

 

以上是Nginx下支持ThinkPHP URL的PATHINFO与REWRITE的配置方法,