我想做的事:
这是一个单页的应用程序。 在我的更改configuration看起来像这样(和它的工作):
location / { root /home/eshlox/projects/XXX/project/project/assets/dist; try_files $uri $uri/ /index.html =404; }
我试图使用if语句:
location / { set $social 1; if ($http_user_agent ~* "facebookexternalhit") { set $social UA; } if ($uri ~* "^/(\d+)$") { set $social "${social}URL"; } if ($social = UAURL) { rewrite ^/(\d+)$ /api/content/item/$1?social=1; } root /home/eshlox/projects/XXX/project/project/assets/dist; try_files $uri $uri/ /index.html =404; }
有了这个configuration,一切正常,只要这两个条件是真的或假的。 如果其中一个条件为真,第二个为假(反之亦然),那么nginx总是返回状态404。
我在nginx网站上发现了“IfIsEvil”,我试图使用映射(我可以在这种情况下使用映射?),但仍然无法解决这个问题。
有任何想法吗?
最好的祝福。
关于nignx wiki中常见的陷阱有很好的文章 。
首先,我已经将root
指令移到了服务器级别。 其次, location
是检查网址的最佳方法。 所以我重新考虑你的要求
我们必须重写url,结果是:
root /home/eshlox/projects/XXX/project/project/assets/dist; location / { try_files $uri $uri/ /index.html; } location ~ "^/\d+$" { if ($http_user_agent ~* "facebookexternalhit") { rewrite (.+) /api/content/item$1?social=1; } try_files $uri $uri/ /index.html; }
而且,在try_files
指令中的/index.html
之后几乎没有理由使用=404
。