某个项目中路由是通过$_SERVER['REQUEST_URI']来进行的匹配处理 , 并且隐藏了index.php
前端路径是http://域名/static/css/xxx.css 而实际路径是位于 /绝对路径/template/static中
在这样的两种情况下 , 不改代码的条件下使用nginx处理
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; }