nginx : 모든 요청을 단일 HTML 페이지로 전송


156

nginx를 사용하여 URL을 유지하고 싶지만 실제로는 동일한 페이지를로드합니다. URL을 with History.getState()javascript 앱에서 요청을 라우팅하는 데 사용합니다. 간단한 일인 것 같아요?

location / {
    rewrite (.*) base.html break;
}

작동하지만 URL을 리디렉션합니까? 여전히 URL이 필요합니다. 항상 같은 페이지를 사용하고 싶습니다.


6
이 질문을 해주셔서 감사합니다. 답변이 준비되었습니다 :-)
Lasse Bunk

답변:


191

나는 이것이 당신을 위해 그것을 할 것이라고 생각합니다 :

location / {
    try_files /base.html =404;
}

1
[emerg] 613 # 0 : "try_files"지시문에 잘못된 개수의 인수가 있습니까?
prismofeverything

2
시도해보십시오 : try_files $ uri /base.html;
Alex Howansky

5
참고-요청 된 파일을 먼저 확인하고없는 경우 base.html을 제공합니다. 따라서 문서 루트 디렉토리에 오래된 추가 파일이 없거나 쿼리가 있으면 직접 제공됩니다.
Alex Howansky

22
사용 try_files '' /base.html;(에 첫 번째 인수로 빈 문자열은 try_files)라는 파일의 조회를 방지합니다 $uri.
davidjb

17
try_files '' /base.html;리디렉션 문제와 내부 서버 오류가 발생했지만 try_files '' /base.html =404;누군가에게 도움이된다면 수정하여 수정했습니다 .
William Turrell

30

사용하는 것이 효과 try_files가 없었습니다 . 로그에 다시 쓰기 또는 내부 리디렉션주기 오류가 발생했습니다.

Nginx 문서에는 몇 가지 추가 세부 정보가 있습니다.

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

그래서 나는 다음을 사용하여 끝났습니다.

root /var/www/mysite;

location / {
    try_files $uri /base.html;
}

location = /base.html {
    expires 30s;
}

1
try_files '' /base.html =404;(위 참조)
Marc

이것은 나를 위해 일했지만 실제로 location = /base.html { expires 30s }부분이 필요하지 않았습니다 .
maechler

17

원래 재 작성은 거의 작동합니다. 왜 리디렉션되는지 확실하지 않지만 실제로 원하는 것은

rewrite ^ /base.html break;

이를 위치 나 서버에 직접 넣을 수 있어야합니다.


13

이것은 나를 위해 일했다 :

location / {
    alias /path/to/my/indexfile/;
    try_files $uri /index.html;
}

이를 통해 자바 스크립트 단일 페이지 앱에 대한 포괄 URL을 만들 수있었습니다. css, fonts 및 javascript와 같은 모든 정적 파일은와 npm run build 같은 디렉토리에 있으면 찾을 수 있습니다 index.html.

정적 파일이 다른 디렉토리에 있다면 어떤 이유로 든 다음과 같은 것이 필요합니다.

# Static pages generated by "npm run build"
location ~ ^/css/|^/fonts/|^/semantic/|^/static/ {
    alias /path/to/my/staticfiles/;
}

10

이것은 나를 위해 일했다 :

location / {
    try_files $uri $uri/ /base.html;
}

7

올바른 방법은 다음과 같습니다.

location / {
    rewrite (.*) base.html last;
}

를 사용 last하면 nginx가 새로운 적합한 제품을 찾을 수 있습니다location 가 재 작성 결과에 따라 블록을 됩니다.

try_files 이 문제에 대한 완벽한 접근 방식이기도합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.