본문 바로가기

main/Server

[CentOS 7 | Apache] React 배포 시 Rewrite 설정

React로 만들어진 프로젝트를 배포하면 웹팩으로 빌드하여 나온 결과물인 main.js를 사이트에서 보여주게 된다.

하지만 이 main.js를 부르는 곳은 "/" 주소 뿐, 만약 "/login"이라던가 "/user" 등의 경로가 붙으면 main.js를 보여주지 않는 현상이 발생한다.

이를 해결하기 위해, 서버 측에서 이 상황을 인식하고 main.js를 반환해줄 수 있도록 Rewrite 설정을 해줄 수 있다.

 

- Rewrite를 적용할 수 있는 범위

Server Config, Virtual Host, Directory, .htaccess

즉 필요한 곳에 사용하면 됨. 나는 VirtualHost 내에서 쓰면 될 것 같아서 여기에다 입력했다.

<VirtualHost *:80>
  ServerName 
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass / 
  ProxyPassReverse / 
  ErrorLog "logs/error_log"

  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^ main.js
</VirtualHost>

 

- RewriteEngine  엔진을 사용할지 여부를 설정

 

- RewriteCond  여기서 설정한 패턴과 일치하는 경우 다음에 오는 Rule을 실행

  -d: 디렉토리

  -f: 파일

  -l: 심볼릭링크

 

- RewriteRule [inputURL] [returnURL]  실질적인 rewrite 룰을 적용

  L: 뒷 구문 여부를 무시하고 그 줄에서 끝낸다

  N: 새로운 룰이 시작된다

  R: 뒷 주소로 넘긴다

  NC: 대소문자 구별 X

  QSA: Cond의 내용을 지난 결과에 덧붙인다

  NE: Out될 값에 특수문자가 Hex로 포함돼있는 경우

 

- RewriteLog & RewriteLogLevel

해당 지시자는 설정하면 오류가 남. apache 최신 버전에서 사용되지 않도록 바뀌었다고 함.

Invalid command 'RewriteLogLevel', perhaps misspelled or defined by a module not included in the server configuration


근데 아무리 해봐도 원하는대로 적용이 잘 안되고 서버가 먹통이 되어버려서

일단 Rewrite를 적용하지 못한 채 다른 방법으로 운영하고 있다..

node.js에서 경로들 들어올 때 index.html 반환해주는 방법으로 넘겨주는 중

 

이거 붙잡고 있을 때가 아닌 것 같아서 관뒀지만 언젠가 다시 보고 적용하기 위해 글로 남겨둠 ㅠ ㅠ

 

 

참고링크

https://blog.munilive.com/posts/how-to-use-htaccess-rewrite-rule.html

https://cheershennah.tistory.com/157