Apache 2 - 특정 네임스페이스를 SPA의 index.html로 다시 라우팅

Apache 2 - 특정 네임스페이스를 SPA의 index.html로 다시 라우팅

나는 Apache 2.4.29 HTTP 서버에서 제공하는 Angular 10-SPA를 가지고 있으며, 과거에는 HTTP 서버를 실행하고 WSGI 애플리케이션 서버를 제공하는 일반적인 HTTP 서버에 대한 실제 경험이 거의 없습니다. 해당 HTTP 서버는 내 백엔드(Django-Rest-Framework를 통해 내 데이터베이스에 연결하는 WSGI를 통한 Django 애플리케이션 서버)도 제공하므로 내 SPA는 들어오는 모든 요청의 수신자가 아니라 지정된 접두사로 시작하는 요청만 수신합니다. 예를 들어 www.mypage.com/prefix/. 나는 기본적으로 /prefix도메인 바로 뒤에 이 URL이 있는 모든 URL이 index.html에 있는 내 SPA에 제공 되도록 구성하려고 노력해 왔습니다 frontendfolder. 그런 다음 즉시 해당 특정 경로에 대한 페이지 구축을 시작합니다.

나는 그것을 읽었습니다.각도 문서apache2 배포 및 apache2 문서에 대해RewriteRule그리고RewriteCond지시문. 이것이 내 sites-available/mypage.conf에 있는 내용입니다. Directory 태그의 모든 내용은angular.io의 수정된 복사 붙여넣기입니다.

        DocumentRoot /path/to/frontendfolder
        #DocumentRoot is not a typo, I'm not sure if DOCUMENT_ROOT calls that variable or not,
        #but there is nothing else called like it in neither the mypage.conf file, nor 
        #apache2.conf, nor envvars

        Alias /prefix /path/to/frontendfolder
        Alias /prefix/ /path/to/frontendfolder/index.html
        <Directory /path/to/frontendfolder>
                Require all granted
                RewriteEngine On
                # If an existing asset or directory is requested go to it as it is
                RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
                RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
                RewriteRule ^/prefix - [L]

                # If the requested resource doesn't exist, use index.html
                RewriteRule ^/prefix /index.html

        </Directory>

이를 통해 내 URL에 있을 때 최소한 index.html을 로드할 수 있습니다 mypage.com/prefix. mypage.com/prefix/page1로 이동하여 새로 고침을 누르면 Apache의 "404 Not Found" 메시지가 표시됩니다.

내 구성에 어떤 문제가 있나요? 나는 RewriteRule ^/prefix /index.html이 URL이 유효한 파일로 연결되지 않는 한 /prefix로 시작하는 모든 것을 내 index.html로 라우팅할 것이라는 인상을 받았습니다. 그렇다면 왜 그런 일이 발생하지 않습니까?

답변1

귀하의 구성이 혼란스러운 것 같습니다. 양해해 주시기 바랍니다.

옳은,문서 루트오타가 아닙니다. 이는 URL 공간을 파일 시스템에 매핑하는 기본 Apache 지시어입니다. 따라서 Alias, RewriteRule 또는 다른 것으로 재정의하는 위치를 제외하고 요청에 응답하기 위해 어디로 가야 하는지 Apache에게 알려줍니다.

달성하려는 URL 공간 매핑이 정확히 무엇인지 잘 모르겠습니다. 최선의 조언은 AliasRewriteRule지시문을 모두 제거하고 DocumentRoot. 그런 다음 원하는 URL 매핑이 제공되는지 확인하세요. 예를 들어,

DocumentRoot /path/to/frontendfolder

그러면 요청이 파일 시스템 example.com/prefix으로 라우팅됩니다 . /path/to/frontendfolder/prefix그것이 디렉토리이고 예를 들어 index.html 파일이 포함되어 있으면 요청은 에 의해 응답됩니다 /path/to/frontendfolder/prefix/index.html.

그것이 출발점입니다. 귀하의 요구 사항을 충족하지 않으면 다음과 같이 필요한 곳에서 재정의를 시작할 수 있습니다.별명및 RewriteRule 지시어. 별칭은 더 간단하고 기본적이므로 먼저 사용해 보고 더 복잡한 요구 사항에는 RewriteRule을 사용하세요.

행운을 빌어요!

그런데 RewriteCond에 대한 문서에는 가 언급되어 있지만 DOCUMENT_ROOT그 값이 무엇인지는 나와 있지 않습니다. 그러나 이것이 DocumentRoot 지시문의 값이라고 가정할 수 있습니다.

관련 정보