我有一个Angular应用程序。我运行命令ng build --prod --aot
来生成dist文件夹。在dist文件夹中,我创建了一个名为Staticfile的文件,然后我使用以下命令将dist文件夹上传到pivotal.io:
- cf推送名称-应用程序-不启动
- cf开始名称-应用程序
应用运行良好。我有一个导航栏,所以当我用导航栏改变路径时一切都很好。但当我手动操作时(我自己输入网址),我有这个错误404 Not Found nginx.这是我的app.component.ts:
const appRoutes: Routes = [
{ path: 'time-picker', component: TimePickerComponent },
{ path: 'material-picker', component: MaterialPickerComponent },
{ path: 'about', component: AboutComponent },
{ path: 'login', component: LoginComponent },
{ path: 'registration', component: RegistrationComponent },
{
path: '',
redirectTo: '/time-picker',
pathMatch: 'full'
}
];
@NgModule({
declarations: [
AppComponent,
TimePickerComponent,
MaterialPickerComponent,
DurationCardComponent,
AboutComponent,
LoginComponent,
RegistrationComponent,
],
imports: [RouterModule.forRoot(
appRoutes
// ,{ enableTracing: true } // <-- debugging purposes only
),
FormsModule,
BrowserAnimationsModule,
BrowserModule,
MdCardModule, MdDatepickerModule, MdNativeDateModule, MdInputModule
],
providers: [{ provide: DateAdapter, useClass: CustomDateAdapter }],
bootstrap: [AppComponent]
})
export class AppModule {
constructor(private dateAdapter: DateAdapter<Date>) {
this.dateAdapter.setLocale('fr-br');
}
}
9条答案
按热度按时间xe55xuns1#
对于那些不使用静态文件的人,可能想试试这个。
我在使用nginx提供Angular 服务时遇到了同样的问题。以下是默认的配置文件,可能在/etc/nginx/sites-available/yoursite中找到
但我们真正想要的是。
fumotvh32#
在
nginx.conf
文件中尝试使用:而不是:
这对我的Angular 5项目工作。
dfty9e193#
我终于找到了答案:在我生成dist文件夹之后。
pushstate: enabled
启用pushstate可使服务于多个路由的客户端JavaScript应用程序的浏览器可见URL保持干净。例如,pushstate路由允许将单个JavaScript文件路由到多个锚点标记的URL,这些URL类似于/some/path 1而不是/some#path1。
kq0g1dla4#
我假设
/dist
目录的所有数据现在都在/var/www/your-domain/
中,如果没有,请先粘贴到该目录现在你的网址是唯一接受的主页或登陆页面,否则他们显示404错误。
在这种情况下,找到ngnix的
/default
文件,在Linux路径中,如/etc/nginx/sites-available/default
,在此文件中,您将看到如下所示替换为
现在你用linux中的命令重新启动你的ngnix服务器
并查看ngnix的状态
dy2hfwbg5#
这是服务器端的问题,而不是Angular 方面的问题。在您的情况下,返回每个请求的索引或登录页是服务器的责任。
无论如何,如果您没有后端或服务器,您可以配置这有两个变通办法。
HashLocationStrategy
qf9go6mv6#
对我来说,这是一个权限问题,Nginx必须是您放置dist的目录的所有者,我在nginx日志文件中看到过此错误
所以我给nginx用户包含我的dist的顶层文件夹权限
然后你必须重启nginx
而且它应该起作用!
cld4siwp7#
Angular 应用程序是单页应用程序。当您手动键入地址时,您会尝试路由到应用程序未运行的位置。
您需要编辑nginx配置来路由到您的基本页面。
wribegjk8#
这实际上是一个nginx配置问题,接下来需要克服这个问题。
在nginx. conf文件中尝试使用:
文件名为$uri $uri//索引. html;
而不是:
用户名:$uri/= 404;
那么以后还需要改一下.
发件人:
至
cwtwac6a9#
如果您正在将Angular 应用程序部署到
S3
,则需要设置Error Document
并将文档索引到index.html
,并清空重定向规则(/properties/static website)x1c 0d1x