thinkphp 几种url模式的配置



几乎所有的框架(ThinkPHP,Zend Framework,CI,Yii,laravel等)都会使用URL重写或者pathinfo模式,使URL看起来更美观,比如可以隐藏掉入口文件,并且有利于搜索引擎优化,其实让Nginx支持pathinfo或者重写也不难,首先在php.ini中设置cgi.fix_pathinfo=1

再就是添加配置文件(新版nginx) 内容如下:

location ~ \.php {
  fastcgi_pass   127.0.0.1:9056;
  fastcgi_index  index.php;

#pathinfo 支持开始  以上配置信息根据实际情况配置
  fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;    
  fastcgi_param PATH_INFO $fastcgi_path_info;    
  fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;  
#pathinfo 支持结束

  include fastcgi_params_modified;
}

 如果是老版本的nginx需要按如下配置

if ($request_filename ~* (.*).php) {
            set $php_url $1;
      }
      if (!-e $php_url.php) {
            return 403;
      }
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
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;
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
#fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
#fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

这样Nginx就支持pathinfo了,当然您需要根据您的服务器进行具体的配置,可能会略有变化,切忌机械的照搬照抄。

对于URL重写也比较简单 例如对于THINKPHP可以这样设置

location / {   
                       if (!-e $request_filename){   
                            #rewrite ^(.*)$ /index.php?s=/$1 last;
                            rewrite ^(.*)$ /index.php/$1 last;
                        }
    }

几乎所有的框架(ThinkPHP,Zend Framework,CI,Yii,laravel等)都会使用URL重写或者pathinfo模式,使URL看起来更美观,比如可以隐藏掉入口文件,并且有利于搜索引擎优化,其实让Nginx支持pathinfo或者重写也不难,首先在php.ini中设置cgi.fix_pathinfo=1

再就是添加配置文件(新版nginx) 内容如下:

location ~ \.php {
  fastcgi_pass   127.0.0.1:9056;
  fastcgi_index  index.php;

#pathinfo 支持开始  以上配置信息根据实际情况配置
  fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;    
  fastcgi_param PATH_INFO $fastcgi_path_info;    
  fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;  
#pathinfo 支持结束

  include fastcgi_params_modified;
}

 如果是老版本的nginx需要按如下配置

if ($request_filename ~* (.*).php) {
            set $php_url $1;
      }
      if (!-e $php_url.php) {
            return 403;
      }
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
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;
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
#fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
#fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

这样Nginx就支持pathinfo了,当然您需要根据您的服务器进行具体的配置,可能会略有变化,切忌机械的照搬照抄。

对于URL重写也比较简单 例如对于THINKPHP可以这样设置

location / {   
                       if (!-e $request_filename){   
                            #rewrite ^(.*)$ /index.php?s=/$1 last;
                            rewrite ^(.*)$ /index.php/$1 last;
                        }
    }

猜你喜欢

转载自blog.csdn.net/liuyubing2018/article/details/80953213