Apache 2.4およびCentOS 7で未処理のパスを/にリダイレクトする

Apache 2.4およびCentOS 7で未処理のパスを/にリダイレクトする

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>

FallbackResourceRedirectMatchの最大の利点の一つはモードの書き換えアプローチは、この設定を更新することなく、新しいパスが追加されたときに機能し続ける「設定して忘れてしまう」設定です。リダイレクトとは異なり、元のリクエストのパスを維持するため、SPAに優しいです。これは、デフォルトでは、Apacheの観点から定義されていないパスに対する要求を代替リソースが処理するようにApacheに指示します。

関連情報