• 목록
  • 아래로
  • 위로
  • 1
  • Ruwaku
  • 조회 수 318

React 배포 시 그냥 React build 후 웹호스팅에 올려도 정상 동작 합니다...

하지만 React의 경우 React-Router를 많이 사용합니다.

React-Router BrowserRouter의 URL은 가짜 주소라서 새로고침하면 404 오류를 뿜는다는거 알고 계실겁니다.

 


 

React-Router BrowserRouter가 적용된 앱을 배포하는 방법은

.htaccess 파일을 활용하는것 입니다.

 

사용자가 특정 디렉토리에 접근할 경우

해당 디렉토리에 .htaccess 파일이 있다면 그 파일을 읽어 시키는대로 합니다.

(루트 디렉토리에 올리면 모든 디렉토리에 적용이 되고, 원하는 디렉토리마다 각각 놓을 수도 있습니다)

 

원래는 apache나 nginx 설정을 통해 적용 가능하지만 우리는 그 곳에 접근할 수 없기에 htaccess를 활용합니다.

 

htaccess 옵션 중 우리가 살펴볼 옵션은

RewriteRule입니다.

<사용자가 입력한 URL을 해석하여 다른페이지로 보내는 등의 행동을 하는 옵션입니다>

 


 

이제 눈치가 빠르신 분들은 벌써 어떻게하는지 방법쯤은 감이 잡히시죠?

 

리액트 앱을 배포한 디렉토리에서 사용자가 입력한 URL의 파일이 존재하지 않는다면

index.html로 URL은 유지한 채 리다이렉트 하겠습니다

 

주의: 만약 사용자가 입력한 URL에 파일이 존재하는지 체크하지 않는다면

css, js 이런 파일들 마저 index.html로 리다이렉트 시키기 때문에 오류가 발생합니다.

 


 

#.htaccess의 주석!
# ▼ RewriteEngine을 활성화 합니다
RewriteEngine On
# ▼ 접속한 곳이 index.html이 아니라면
RewriteRule ^index\.html$ - [L]
# ▼ 그와 동시에 접속한 곳에 파일이 없다면
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
# ▼ URL은 유지한 채 index.html을 표시합니다
RewriteRule . ./index.html [L]

 

주석을 참고하시면 되겠습니다.

 

이렇게하면 /blabla 이런식으로 없는 파일명 URL로 접속해도

정상적으로 React Routing 가능합니다.

 

(404는 React에서 구현해야 함. 구글 검색 ㄱㄱ!!)

 

 

 

htaccess에 대한 자료가 너무 적은탓에 저처럼 삽질하시지 말고 도움 되시길 바랄게요

이니스프리님 이니스프리 포함 1명이 추천

추천인 1

댓글 1

joyfuI
리액트 공부하고 았는데 구글링하다가 스포어에 돌아왔네요ㅎㅎ
좋은 글 감사합니다.
comment menu
2021.03.30. 14:33

신고

"joyfuI님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [1차 해결 및 추가] 서버 접속 불가 문제 안내 12 마스터 마스터 24.06.20.15:22 232
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 마스터 24.02.11.17:21 2282
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 5968
256 HEIC to JPG 변환 이니스프리 이니스프리 19.08.29.22:37 1542
255 목록통관건 개인통관고유부호 필수 사용안내 이니스프리 이니스프리 19.08.28.23:14 137
254 아미나의 썸네일 함수 관련 Q&A 1 이니스프리 이니스프리 19.08.28.14:57 336
253 [펌] 하이패스 미납요금 내기 귀찮을 땐, 동네 편의점? image 이니스프리 이니스프리 19.08.28.14:53 167
252 링크 파싱 모듈을 제작하다가 깨달은 점 ㅠㅠ 이니스프리 이니스프리 19.08.27.22:06 152
251 코스피 API에 대한 공공데이터포털의 답변 이니스프리 이니스프리 19.08.26.21:39 651
250 [끝말잇기] '슘'으로 시작되는 단어 중 XE타운에서 사용할 수 있는 단어 이니스프리 이니스프리 19.08.25.01:01 192
249 MS Chromium 엣지 브라우저 Beta의 공식버전 발표 image 이니스프리 이니스프리 19.08.24.22:39 187
248 [HiHost] 저렴한 트래픽 초과요금 없는 가상서버호스팅 image 이니스프리 이니스프리 19.08.24.16:37 221
247 CMS에 Selenium 봇이 글을 작성하는 것을 차단하는 방법 2 이니스프리 이니스프리 19.08.22.06:27 737
246 파이썬에서 실행한 결과를 PHP에서 받는 방법 이니스프리 이니스프리 19.08.21.21:25 2887
245 [끝말잇기] '슘'으로 시작하는 단어 이니스프리 이니스프리 19.08.20.01:10 4328
244 파이썬 3.X에서 animated GIF 파일을 곧바로 resize할 수 있는 라이브러리 이니스프리 이니스프리 19.08.19.17:19 534
243 Summernote용 이모지 플러그인 테스트 결과 작동하는 플러그인 이니스프리 이니스프리 19.08.19.00:19 322
242 PHP로 페이스북을 크롤링할 때 유의할 점 이니스프리 이니스프리 19.08.18.01:29 714
241 PyQt5에서 treeView의 헤더를 클릭하여 정렬하기 - treeView.setSortingEnabled 메서드와 관련하여 이니스프리 이니스프리 19.08.09.15:38 486
240 오토셋 업그레이드가 중단되었네요! 4 이니스프리 이니스프리 19.07.29.18:30 377
239 PHP 7.4 beta 1 환경에서 그누보드 5.4.0.1 설치 가능 여부 이니스프리 이니스프리 19.07.23.13:37 413
238 masonry 라이브러리 사용시 세로방향 이미지 겹침 문제에 대한 해결방법 이니스프리 이니스프리 19.07.20.23:39 1173
237 [PHP] 파일을 읽어서 각 행을 리스트로 만들기 이니스프리 이니스프리 19.07.10.20:29 162