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