一連のWebアプリを実行しているApache Webサーバーがあります。個々のアプリごとに着信httpトラフィックをhttpsに正常にリダイレクトしましたが、ルートパス(何もない)に着信するすべてのトラフィックを特定のアプリにルーティングできません。 httpでは機能しますが、httpsでは機能しません。
したがって、基本的に現在、次のURLは正しくリダイレクトされます。
http://example.com/app1-> https://example.com/app1 http://example.com/app2-> https://example.com/app2など http://example.com-> https://example.com/app1
しかし、私はこれをどのように機能させるか理解できません:
https://example.com-> https://example.com/app1
私のApache設定ファイルには以下が含まれています:
<VirtualHost xxx.xxx.xxx.xx:80>
ServerName example.com
RedirectMatch 301 ^/$ /app1/
Redirect permanent / https://example.com/
</VirtualHost>
次のようなRewriteCond/RewriteRuleペアを追加してみました
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule ^/$ https://example.com/app1 [R=301,L]
同様に、私が機能するはずだと思った他の多くのことも、それらは何もしないか、私の構成の他の部分を壊しているようです。
このサーバー上のアプリを指す他のドメインもあるので、SSL証明書がマルチドメインであることが重要な場合。これらはすべて、次のようにすれば完全に問題なく動作します(ただし、リダイレクトに関する追加の要件はありません)。
<VirtualHost xxx.xxx.xxx.xx:80>
ServerName example2.com
Redirect permanent / https://example2.com/
</VirtualHost>
では、他に何も壊すことなく、httpsをrootからsuburiにリダイレクトするにはどうすればよいですか?
Httpとhttpsの同じRewriteRuleでうまくいくはずです。他にある場合は、それらを最初に置いてください。私はmod_aliasよりもmod_rewriteを好みます。
<VirtualHost xxx.xxx.xxx.xx:80>
ServerName example.com
RewriteEngine On
RewriteRule ^/$ https://example.com/app1 [R=301,L]
</VirtualHost>
<VirtualHost xxx.xxx.xxx.xx:443>
ServerName example.com
RewriteEngine On
RewriteRule ^/$ https://example.com/app1 [R=301,L]
</VirtualHost>
mod_rewrite よりも mod_alias を優先するGerardの答えは、これがmod_aliasを使用して達成できなかったという幻想を残しています。 Apacheの公式ドキュメントによると:
mod_rewriteを使用しない場合
mod_rewrite は、他の代替手段が必要であることが判明した場合、最後の手段と見なす必要があります。より簡単な代替手段があるときにそれを使用すると、構成が混乱しやすく、壊れやすく、保守が困難になります。他にどのような選択肢があるかを理解することは、 mod_rewrite の習得に向けた非常に重要なステップです。
シンプルなリダイレクト
mod_alias は、
Redirect
およびRedirectMatch
ディレクティブを提供します。これは、1つのURLを別のURLにリダイレクトする手段を提供します。このような1つのURLまたはURLのクラスの別の場所への単純なリダイレクトは、RewriteRule
ではなく、これらのディレクティブを使用して実行する必要があります。RedirectMatch
を使用すると、リダイレクト基準に正規表現を含めることができ、RewriteRule
を使用する利点の多くが提供されます。
RedirectMatch 301 ^/$ /app1/
の唯一の問題は、最後のパラメーターがURLではなく相対参照であることです。
RedirectMatch
ディレクティブ構文:
RedirectMatch [status] regex URL
Mod_aliasを使用した完全な構成は次のようになります。
<VirtualHost *:80>
ServerName example.com
RedirectMatch 301 ^/$ https://example.com/app1/
Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
RedirectMatch 301 ^/$ https://example.com/app1/
</VirtualHost>