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.html
mydomain.com
index.html
index.html
.js
assets
(이 경우에는 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.com
VirtualHost
/
304
302
html
또한 동일한 요청에 대한 페이지 소스를 보면 콘텐츠가 index.html
실제로 올바르게 제공되고 있지만 의 코드가 파일 또는 하위 디렉터리의 콘텐츠에 index.html
액세스할 수 없기 때문에 브라우저가 여전히 비어 있는 것을 볼 수 있습니다 . .js
assets
따라서 문제는 파일 과 콘텐츠를
RedirectMatch 302 ^/(?!index.html$).+ http://mydomain.com
허용하도록 다시 작성해야 한다는 것입니다 ..js
assets
뒤에 어떤 문자열이 추가되더라도 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를 반환하도록 하십시오.