某个项目中路由是通过$_SERVER['REQUEST_URI']来进行的匹配处理,并且隐藏了index.PHP
前端路径是http://域名/static/css/xxx.css 而实际路径是位于 /绝对路径/template/static中
- server {
- listen 80;
- server_name xxxx;
- root /var/www/html/admin;
- location / {
- index index.PHP;
- }
- location /static {
- root /var/www/html/admin/template;
- }
- if (!-e $request_filename) {
- rewrite ^/((?!static).*)$ /index.PHP/$1 last;
- break;
- }
- location ~ \.PHP {
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.PHP;
- #fastcgi_connect_timeout 10s;
- fastcgi_read_timeout 60s;
- fastcgi_split_path_info ^((?U).+\.PHP)(/?.+)$;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_param PATH_INFO $fastcgi_path_info;
- fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
- include fastcgi_params;
- }
- }
最关键的是location块匹配到static后,设置了新的root
rewrite正则,除去了static,因为单纯的靠!-e $request_filename排除不了,因为它路径是404,还是会进判断,只能靠正则了
if (!-e $request_filename) {
rewrite ^/((?!static).*)$ /index.PHP/$1 last;
break;
}