ユーザーにhttpsを使用してログインするように強制したいのですが、残念ながら「redirect」ディレクティブは「ProxyPass」と連携して機能しないようです。
<VirtualHost *:80>
ServerName www.domain.com
# This does not work
Redirect permanent /app/login.jsp https://www.domain.com/app/login.jsp
ProxyPass /app http://localhost:8080/app
ProxyPassReverse /app http://localhost:8080/app
</VirtualHost>
何か案が ?ありがとう。
ここでこの質問に対する答えを見つけました:
https://serverfault.com/questions/605931/can-you-use-redirect-and-proxypass-at-the-same-time
他のproxypassディレクティブの前に、以下を追加する必要があります。
ProxyPass /app/login.jsp!
もっと複雑なユースケースがあり、ProxyPassMatch
を使用する必要がありました。それはこのように少し行きました:
ProxyPassMatch ^/app(/(index.html)?)?$ !
RedirectMatch ^/app(/(index.html)?)?$ /path/to/login/page.html
ProxyPass /app/* http://remote-server/app
ProxyPassReverse /app/* http://remote-server/app
ProxyPassMatch
はプレフィックス照合を実行するため、ProxyPass
を使用する必要がありました。文字列の終わりで一致する必要があるため、ProxyPassMatch
と$
正規表現のメタ文字は重要です。
ここでは、RedirectMatch
も同じように使用されます。これは、Redirect
もプレフィックスマッチングを実行するためです。 2つのディレクティブにも対称性があります。
あなたが特定したように、あなたが場所/app
にProxyPass
を持っているという事実は、そのパスに当たるすべてのものがプロキシの対象となることを意味します。
ProxyPass
の使用を省略し、RewriteRule
とプロキシ[P]
フラグを使用してプロキシを実行できます。
<VirtualHost *:80>
ServerName www.domain.com
RewriteRule ^/(app/login.jsp)$ https://www.domain.com/$1 [R=301,L]
RewriteRule ^/app(.*) http://localhost:8080/app$1 [P]
ProxyPassReverse /app http://localhost:8080/app
</VirtualHost>