nginx url重写和pathinfo配置

nginx近年来的上涨趋势确实挺快的,但是apache作为老牌HTTP服务器,拥有的生态圈是nginx比不上的。一个最简单的例子,URL重写,apache的话利用无所不能的.htaccess文件就可以了。nginx还要改主配置文件。

URL重写配置

主配置文件

1
2
3
4
5
6
location /
{
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?$1 last;
}
}

if和(中间要有括号,url重写这里就配置完了。

pathinfo配置

nginx原生是不支持pathinfo的,但是通过配置fastcgi参数可以达到效果

主配置文件

1
2
3
4
5
6
7
8
9
location ~ [^/]\.php(/|$)
{
# comment try_files $uri =404; to enable pathinfo
#try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
include pathinfo.conf;
}

fastcgi.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
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_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 HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
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;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

pathinfo.conf

1
2
3
4
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
try_files $fastcgi_script_name =404;

结语

从这些配置可以看出来,nginx的可定制性还是很强的,同样的,apache下的.htaccess文件,经过一些改写也能在nginx上成功运行~

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×