Apache の mod_rewrite と mod_auth_mellon の設定が被ってリダイレクトがうまくいかなかった。

2022-06-06

こんにちは、0371です。

今回は、Apache の mod_rewrite と mod_auth_mellon の設定が被ってリダイレクトがうまくいかなかったので、それを解決した方法を書いていきます。
誰もがこれで解決できるわけではなさそうですが、念の為。 1週間くらいハマっていましたが、難しく考えすぎていたのかもしれません。

状況

mod_rewriteと、mod_auth_mellonのリダイレクト先が同じになっています。

vhost.conf

<Location />
~~~省略~~~
MellonEndpointPath /sso
MellonDefaultLoginPath /login/login.php

<Directory "var/www/html/foo/bar/login">
  AllowOverride None
  RewriteEngine on
  RewriteBase /login
  RewriteRule ^/?/applogin$ applogin.php
</Directory>

idP側の設定(AzureAD)

サインオンURL https://hogemoge.com/login

解決策

対象のサーバーにシンボリックリンクを作成します。

sudo ln -s /var/www/html/foo/bar /var/www/html/foo/bar/login

vhost.confの記述の順番を変えます。
mellonの記述が下になるように記述します。

vhost.conf

<Directory "var/www/html/foo/bar/login">
  AllowOverride None
  RewriteEngine on
  RewriteBase /login
  RewriteRule ^/?index/applogin$ index/applogin.php
</Directory>

<Location />
  ~~~省略~~~
  MellonEndpointPath /sso
  MellonDefaultLoginPath /login/login.php
</Location>

動作確認

https://hogemoge.com/login/applogin にアクセスし、ログイン画面が出ることを確認します。
その後、アクセスログかidPのweb画面でSAMLの認証がされているかが確認できればOKです。

適当な解説

記述の順番を変えることで、mod_rewriteとmod_auth_mellonの優先順位を変更することができます。

今日の一言

サーバーの設定はむずかしい!!!!