页面载入中,请稍候...

nginx 配置pathinfo 支持tp以及其他框架 和伪静态

2013-05-24 12:47:31    作者:user    来源:会员投稿    评论:读取中    点击:读取中    [我要投稿]

几 乎所有的框架(ThinkPHP,ZendFramework,CI,Yii等)都会使用URL重写或者pathinfo模式,使URL看起来更美观, 并且有利于搜索引擎优化,...

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

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

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可以这样设置(2)

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

(1).~ \.php 后面不能有$  以便能匹配所有 *.php/* 形式的url

(2). location 在 (1).的前面

例子:

server {
        listen       80;
        server_name  www.sunny.com;
        root /www/web/sunny;
        index index.php index.html index.htm;

   location / {
        root   /usr/share/nginx/sunny/;
        index  index.php index.html index.htm;
        if (!-e $request_filename) {
        rewrite  ^(.*)$  /index.php?s=$1  last;
        break;
        }
    }


location ~ \.php {
     include fcgi.conf;
}


location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
     expires      30d;
}


location ~ .*\.(js|css)?$ {
     expires      12h;
}

}

以下是fcgi.conf文件中的内容:

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  

上一篇:CentOS 5 优化方案
下一篇:Linux文件权限详解

分享到: 收藏