We have a Lumen app with an AngularJS front end. We are using front-end routing and we removed the hashtag in the url by setting html5Mode to true.
The issue is that when we try to reload the page or type the address without the hashtag, we get an error:
NotFoundHttpException in Application.php line 1244
In our nginx config file, we have this line (we're using prerender.io to cache our pages for SEO):
location / {
try_files $uri $uri/ /index.php?$query_string @prerender;
The @prerender looks like this (I removed my token given from prerender.io):
location @prerender {
proxy_set_header X-Prerender-Token MY-TOKEN-IS-HERE;
set $prerender 0;
if ($http_user_agent ~* "baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator") {
set $prerender 1;
}
if ($args ~ "_escaped_fragment_") {
set $prerender 1;
}
if ($http_user_agent ~ "Prerender") {
set $prerender 0;
}
if ($uri ~ "\.(js|css|xml|less|png|jpg|jpeg|gif|pdf|doc|txt|ico|rss|zip|mp3|rar|exe|wmv|doc|avi|ppt|mpg|mpeg|tif|wav|mov|psd|ai|xls|mp4|m4a|swf|dat|dmg|iso|flv|m4v|torrent|ttf|woff)") {
set $prerender 0;
}
#resolve using Google's DNS server to force DNS resolution and prevent caching of IPs
resolver 8.8.8.8;
if ($prerender = 1) {
#setting prerender as a variable forces DNS resolution since nginx caches IPs and doesnt play well with load balancing
set $prerender "service.prerender.io";
rewrite .* /$scheme://$host$request_uri? break;
proxy_pass http://$prerender;
}
if ($prerender = 0) {
rewrite .* /index.html break;
}
}
NOTE: the last if says "/index.html". I did already try it with "/index.php". What happens when I do this is that the index.php file simply gets downloaded by the client as if it was a download file.
Any help to fix the reload issue would be greatly appreciated. Please let me know if you need any additional information.