nginx 配置rewrite笔记:
通过下面的示例来说明一下,
1. 先说说location :
location 表示匹配传入的url地址,其中配置符有多种,各种情况的意义不一样:
location ^~ /public/ {
root /data/wwwroot/a.php.abc.cc;
}
location ^~ /public/ 表示匹配以 “/public/” 开头的url,匹配成功执行其中的内容,执行完毕后停止并退出。
location / {
root /data/wwwroot/a.php.abc.cc;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
}
location / { ... } 表示匹配所以的url,匹配成功执行其中的内容,执行完毕后停止并退出。
rewrite ^/e10adc3949ba[/]?$ /e10adc3949ba.php last; 表示将 /e10adc3949ba 或 /e10adc3949ba/ 开头的url修改为 /e10adc3949ba.php
rewrite ^/e10adc3949ba/([a-z]*/[a-z]*)/([a-z]*)$ /e10adc3949ba.php?c=$1&a=$2 last; 表示将pathinfo地址转换为参数地址,
比如原url: /e10adc3949ba/help/manage/lists 转换后:/e10adc3949ba.php?c=help/manage&a=lists
server {
listen 80;
server_name a.php.abc.cc;
access_log /data/wwwlogs/a.php.abc.cc_nginx.log combined;
index index.html;
root /data/wwwroot/a.php.abc.cc;
location ^~ /public/ {
root /data/wwwroot/a.php.abc.cc;
}
location ^~ /datas/ {
root /data/wwwroot/a.php.abc.cc;
}
rewrite ^/e10adc3949ba[/]?$ /e10adc3949ba.php last;
rewrite ^/e10adc3949ba/([a-z]*/[a-z]*)/([a-z]*)$ /e10adc3949ba.php?c=$1&a=$2 last;
rewrite ^/e10adc3949ba/([a-z]*/[a-z]*)/([a-z]*)\?(.*)$ /e10adc3949ba.php?c=$1&a=$2&$3 last;
location ^~ /e10adc3949ba {
root /data/wwwroot/a.php.abc.cc;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/e10adc3949ba.php;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
break;
}
rewrite ^/([a-z]*)/([a-z]*)$ /index.php?m=home&c=$1&a=$2 last;
rewrite ^/([a-z]*)/([a-z]*)\?(.*)$ /index.php?m=home&c=$1&a=$2&$3 last;
location / {
root /data/wwwroot/a.php.abc.cc;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
}
}
整个配置的意思为:
1.优先匹配/public和/datas,这两个中包含的是公用的可公开的文件,比如js,css,自定义文件等等。
2. 如果1没有匹配上,则剩下的都是php文件。php分为两类,一个是e10adc3949ba.php (后台入口),另一个是index.php(前台入口)。
3. 先配置后台,后台的都需要包含 /e10adc3949ba , 通过这个前缀对后台进行匹配。匹配到就调用后台入口执行,执行完毕退出。
4. 上下的默认都是前台内容,先进行url转换,将phpinfo格式的url转换为参数模式。然后调用index.php入口文件执行。
5. 最后的匹配还包含了 / 的情况和其他错误的地址情况都会匹配上。错误处理由代码完成。