使用環境
GCP(GCE)
Apache2.4.25
Debian9.11
背景
WordPressを使ったサイトで、管理画面をwp-adminのままにしているとセキュリティ的に危ないので、
Apacheのmod_rewriteを使って、.htaccessにRewriteRuleを記述して変更したかった。
WordPressのプラグインにSiteGuard Wp Pluginなるものがあったので、それを使って管理画面ログインページを変更したものの、
なぜか変更後に試しに一度ログアウトしてみると、404 not foundになってしまう。
調査方法と対処法
①そもそもmod_rewriteがインストールされていて、有効になっているか調べる
$ cat /etc/apache2/mods-available/rewrite.load
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
上記が表示されればインストールはされているので、次にa2enmodコマンドで有効化する
(a2enmodがnot foundになったら、apt-get install a2enmod
でインストール)
$ sudo a2enmod rewrite
Module rewrite already enabled
どうやら有効化もされているようなので、mod_rewriteは正常そう
②変更後のURLでサーバーにアクセスはきているのかログをみてみる
$ cat /var/log/apache2/access.log
404返しているログがあったので、こちらも問題なさそう
③.htaccessの記述はされていて、正しいかどうかみてみる
$ cat /var/www/html/.htaccess
# SITEGUARD_PLUGIN_SETTINGS_START
# ==== SITEGUARD_RENAME_LOGIN_SETTINGS_START
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^wp-signup\.php 404-siteguard [L]
RewriteRule ^wp-activate\.php 404-siteguard [L]
RewriteRule ^hogehoge(.*)$ wp-login.php$1 [L]
</IfModule>
# ==== SITEGUARD_RENAME_LOGIN_SETTINGS_END
# SITEGUARD_PLUGIN_SETTINGS_END
こちらも問題なさそう
④mod_rewriteのオーバーライド設定確認
$ ls /etc/apache2/sites-available
000-default.conf
default-ssl.conf
wordpress.conf
これらのconfファイルのどこかに
AllowOverride All
の記述があればオーバーライドは許可されているはず。
そして結果記述がなかったので、wordpress.confに上記を追加してApacheを再起動したら、無事ログアウトでき、
/wp-admin/では404になり、変更後のURLを入力したらログイン画面が出てきた。
めでたしめでたし。
2020/03/11更新
/etc/apache2/apache2.confの172行目にAllowOverrideの設定があったので、それをAllに変更してあげるだけで大丈夫でした
参考
https://www.adminweb.jp/wordpress/permalink/index2.html
https://qiita.com/u-akihiro/items/c7a5bb38c34858d00c2a
http://www.bnote.net/kuro_box/apache2_mod_rewrite.shtml
https://teratail.com/questions/52734