루트가 아닌 모든 경로를 Amazon Linux 2 및 Apache의 index.html로 리디렉션

루트가 아닌 모든 경로를 Amazon Linux 2 및 Apache의 index.html로 리디렉션

Amazon Linux 2 인스턴스는 Apache를 사용하여 Angular 7 애플리케이션을 호스팅하고 있습니다. Angular 7 애플리케이션에는 index.html. 뿐만 아니라 여러 .js파일과 assets.

index.html지정되지 않은 경로에 대한 모든 Apache 요청이 로 리디렉션되도록 하려면 어떤 특정 구문을 사용해야 합니까 DocumentRoot? 또한 필수 구문 에서는 클라이언트 브라우저가 로드될 때 디렉터리 .js의 모든 파일과 콘텐츠가 assets보조 요청으로 요청되도록 허용해야 합니다 index.html.

예를 들어, 원격 웹 브라우저가 요청을 하면 Apache가 요청에 응답하는 것과 동일한 방식으로 Apache가 응답하기를 원합니다 mydomain.com/randomCharacters. 그런 다음 파일 및 하위 디렉터리의 내용에 액세스할 수 있어야 합니다. index.htmlmydomain.comindex.htmlindex.html.jsassets

(이 경우에는 DocumentRoot이라는 디렉터리입니다 /var/www/mydomain.com/public_html. 또한 /var/www/mydomain.com/public_html디렉터리에는 1. index.html, 2. 여러 .js파일, 3. assets이미지 등이 포함된 하위 디렉터리가 포함됩니다.)

구성을 최대한 깔끔하게 유지하기 위해 블록 RedirectMatch내부를 사용 하고 싶습니다 . VirtualHost이것이 내 생각이다. 다음 내용을 어떻게 수정해야 합니까?

<VirtualHost *:80>
    ServerName www.mydomain.com
    ServerAlias mydomain.com
    DocumentRoot /var/www/mydomain.com/public_html
    ErrorLog /var/www/mydomain.com/error.log
    CustomLog /var/www/mydomain.com/requests.log combined
    RedirectMatch 302 ^/(?!index.html$).+ http://mydomain.com  
</VirtualHost>


결과에 대한 포렌식 분석:

Firefox 개발자 도구의 네트워크 탭을 열고 위의 작업을 시도했을 때 요청을 했고 http://mydomain.com그 결과 모든 요청 에 ​​응답이 표시되는 반면 명명된 파일(예: 스크립트)에 대한 모든 요청에는 응답이 제공되었음을 표시했습니다. 스타일시트가 반응했습니다 . RedirectMatch 302 ^/(?!index.html$).+ http://mydomain.comVirtualHost/304302

html또한 동일한 요청에 대한 페이지 소스를 보면 콘텐츠가 index.html실제로 올바르게 제공되고 있지만 의 코드가 파일 또는 하위 디렉터리의 콘텐츠에 index.html액세스할 수 없기 때문에 브라우저가 여전히 비어 있는 것을 볼 수 있습니다 . .jsassets

따라서 문제는 파일 과 콘텐츠를 RedirectMatch 302 ^/(?!index.html$).+ http://mydomain.com허용하도록 다시 작성해야 한다는 것입니다 . .jsassets뒤에 어떤 문자열이 추가되더라도 Apache가 Angular 7 애플리케이션을 성공적으로 제공할 수 있도록 이 문제를 해결하려면 어떤 특정 구문이 필요합니까?http://mydomain.com?

답변1

RewriteRule컨텍스트 에서 다음과 같은 것을 사용할 수 있습니다 VirtualHost.

RewriteEngine On
# if not a regular file
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
# and not a directory
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
# then rewrite to index.html
RewriteRule ^.*$ /index.html [L]

구성을 "가능한 한 깔끔하게" 만들고 싶다면 이와 같은 작업을 수행하지 말고 Apache가 HTTP 404를 반환하도록 하십시오.

관련 정보