尝试使用带有Laravel后端的Angular JS从Apache迁移到Nginx。
前端和后端完全相互独立,如 var / www / angular 和 var / www / laravel 。它们来自同一个域 - mysite.com (有角度)和laravel API路径通过 mysite.com/api
我已经完成了所有工作,包括html5mode和前端路由的浏览器刷新,例如 mysite.com/foo
问题是,刷新或手动输入 mysite.com/foo/bar 不起作用。相反,html是在没有css的情况下提供的,这意味着它不会被路由到角度。
非常感谢任何建议。
这是我目前的Nginx vhost配置:
server {
listen 80 default_server;
server_name default;
root /home/forge/default/laravel/public;
# FORGE SSL (DO NOT REMOVE!)
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_certificate;
# ssl_certificate_key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
index index.html index.htm index.php;
charset utf-8;
location / {
root /home/forge/default/angular/dist;
try_files $uri $uri/ /index.html;
}
location /lvl/ {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \/lvl\/index\.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
include fastcgi.conf;
#This specifically sets so the /api/ portion
#of the URL is not included
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
#fastcgi_param ENV production;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/default-error.log error;
error_page 404 /index.html;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
编辑1: 根据raam86的评论,我尝试了一个版本的重写,他用同样的确切结果反映了我,问题仍然存在。以下是我所做的编辑:
location / {
root /home/forge/default/angular/dist;
try_files = $uri @missing;
}
location @missing {
rewrite ^/$ /index.html last;
}
答案 0 :(得分:1)
原来问题的根源是grunt没有在样式声明之前应用base /,即使我有
<base href="/">
设置在我的index.html
的头部解决方案很简单......只需将基础标签移动到头部顶部而不是底部!