Apache 2.4 및 CentOS 7에서 처리되지 않은 경로를 /로 리디렉션

Apache 2.4 및 CentOS 7에서 처리되지 않은 경로를 /로 리디렉션

CentOS 7 서버는 에서 공개 프런트엔드 웹사이트를 호스팅 example.com하고 에서 백엔드 API를 호스팅합니다 home.example.com. 아래 레코드는 VirtualHost성공적으로 요청을 프런트엔드에 전달하는 example.com동시에 요청을 백엔드로 전달합니다 home.example.com. 그러나 경로의 요청에 대한 요청은 오류를 example.com발생시킵니다 .404

요청을 example.com으로 리디렉션 VirtualHost하려면 아래 구성에서 구체적으로 어떤 변경이 필요합니까 ?example.com/anyPath get

예를 들어 요청http://example.com/home서버에 도달하는 것은 반환되어야 합니다.example.com

여기있어 VirtualHost:

<VirtualHost www.example.com:80>
    ServerName www.example.com
    ServerAlias example.com
    ErrorLog /var/log/httpd/example_com_error.log
    CustomLog /var/log/httpd/example_com_requests.log combined
    DocumentRoot /var/www/example/public_html
</VirtualHost>

<VirtualHost home.example.com:80>
    ServerName home.example.com
    ErrorLog /var/log/httpd/example_home_com_error.log
    CustomLog /var/log/httpd/example_home_com_requests.log combined
    ProxyPass / http://public.ip.for.api:1234/ connectiontimeout=5 timeout=30
</VirtualHost>

답변1

리디렉션하려면 첫 번째 VirtualHost지시어(적절한 인덱스 파일 포함)에 추가하면 됩니다.

RedirectMatch 302 ^/(?!index.html$).+ http://example.com

기본적으로 이는 /index.html과 정확히 일치하지 않고 뒤에 하나 이상의 문자가 오는 모든 항목과 일치한다는 의미입니다.

Rewrite이를 사용하여 다양한 효과를 얻을 수도 있습니다 . Apache는 요청된 내용에 관계없이 인덱스 파일을 제공합니다.

RewriteEngine on
RewriteRule ^/.* index.html

답변2

내 생각에는 이 결과를 얻는 가장 간단하고 깨끗하며 가장 정확한 방법은 다음과 같습니다.

<VirtualHost www.example.com:80>
    #...
    DirectoryIndex index.html     # This is likely already set globally
    FallbackResource /index.html  # Catchall for any undefined path (from Apache's point of view)
    #...
</VirtualHost>

FallbackResourceRedirectMatch의 가장 큰 장점 중 하나는모드 재작성접근 방식은 이 구성을 업데이트할 필요 없이 새 경로가 추가될 때 계속 작동하는 "설정하고 잊어버리는" 설정이라는 것입니다. 리디렉션과 달리 원래 요청의 경로를 유지하므로 SPA 친화적입니다. 이는 기본적으로 Apache의 관점에서 정의되지 않은 경로에 대한 요청을 대체 리소스가 처리하도록 Apache에 지시합니다.

관련 정보