CentOS 7サーバーは、で公開フロントエンドWebサイトをホストし、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と正確に一致せず、後に1つ以上の文字が続くすべてのエントリと一致することを意味します。
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に指示します。