[Nginx] location与rewrite配合处理项目的重写和路径问题

前端之家收集整理的这篇文章主要介绍了[Nginx] location与rewrite配合处理项目的重写和路径问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

某个项目中路由是通过$_SERVER['REQUEST_URI']来进行的匹配处理,并且隐藏了index.PHP

前端路径是http://域名/static/css/xxx.css 而实际路径是位于 /绝对路径/template/static中

 

在这样的两种情况下,不改代码的条件下使用Nginx处理

  1. server {
  2. listen 80;
  3. server_name xxxx;
  4. root /var/www/html/admin;
  5. location / {
  6. index index.PHP;
  7. }
  8. location /static {
  9. root /var/www/html/admin/template;
  10. }
  11. if (!-e $request_filename) {
  12. rewrite ^/((?!static).*)$ /index.PHP/$1 last;
  13. break;
  14. }
  15. location ~ \.PHP {
  16. fastcgi_pass 127.0.0.1:9000;
  17. fastcgi_index index.PHP;
  18. #fastcgi_connect_timeout 10s;
  19. fastcgi_read_timeout 60s;
  20. fastcgi_split_path_info ^((?U).+\.PHP)(/?.+)$;
  21. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  22. fastcgi_param PATH_INFO $fastcgi_path_info;
  23. fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
  24. include fastcgi_params;
  25. }
  26. }

最关键的是location块匹配到static后,设置了新的root

rewrite正则,除去了static,因为单纯的靠!-e $request_filename排除不了,因为它路径是404,还是会进判断,只能靠正则了

if (!-e $request_filename) {
rewrite ^/((?!static).*)$ /index.PHP/$1 last;
break;
}

猜你在找的Nginx相关文章