.htaccessについて
#memo #調べてみた #2020.11
https://wp-doctor.jp/blog/2019/02/13/ワードプレスで使えるhtaccessのリダイレクト技8選/
.htaccessの記述に下記を追記すると、HTTPSへ強制リダイレクトになる
code:.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on NC
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} R=301,L
</IfModule>
独ドメのルートDirで上記設定を入れておくと、必然的に下位Dirでもリダイレクトされることになる、、、はずだけど、WordPressの場合はwp用の.htaccessが最初に設定されるので、下記のような.htaccessの設定が有効になっており、上位のDirでの設定を上書きしてしまう
code:.htaccess_wp
$ cat .htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - L
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php L
</IfModule>
$
なので、上位Dirで記述したhttpsへのリダイレクトの設定を再度こちらにも追記する。。。
code:blog/.htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
# ---追記ここから
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} L,R=301
# ---追記ここまで
RewriteRule ^index\.php$ - L
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php L
</IfModule>
# END WordPress
これでリダイレクト設定ができた。
例えばこんな感じでドメインのルートディレクトリの下にサブディレクトリがあって、そこにWPがそれぞれある場合、各ディレクトリで同様の作業が必要。
blog は対応したけど、formとwpは未対応だったら、そっちもやる
code:dir
$ ll
合計 36
-rw-r--r-- 1 chillout User 178 4月 20 2020 ads.txt
drwxr-xr-x 5 chillout User 4096 11月 2 22:45 blog
drwxr-xr-x 5 chillout User 4096 7月 16 16:37 form
-rw-r--r-- 1 chillout User 6132 5月 25 17:44 img.jpg
-rw-r--r-- 1 chillout User 409 5月 25 18:23 index.html
-rw-r--r-- 1 chillout User 306 8月 21 14:48 test2.py
drwxr-xr-x 5 chillout User 4096 10月 2 07:07 wp
chillout.jp-bananabaum@spd002 mochi5o-work$
こうすると、wwwなしに統一できる
code:form/.htaccess www設定
$ cat .htaccess
# BEGIN WordPress
# BEGIN WordPress から END WordPress までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /form/
# ---追記ここから
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} L,R=301
# 以下2行がwwwをリライトする処理
RewriteCond %{HTTP_HOST} ^www\.(.*)$ NC
RewriteRule ^(.*)$ https://%1/$1 R=301,L
# ---追記ここまで
RewriteRule ^index\.php$ - L
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /form/index.php L
</IfModule>
# END WordPress
$
https://qiita.com/ejointjp/items/f8e2a6686b3850f836c9
用途別に記述がわかりやすい。最後の例はディレクティブ分ける意味あんまりないけど。
https://wp-doctor.jp/blog/2019/02/13/ワードプレスで使えるhtaccessのリダイレクト技8選/
リダイレクトの書き方もいろいろある
さっきはサブディレクトリにWP入れたケースだったけど、サブドメイン切って別のディレクトリにした場合も、当然.htaccess の設定は個別に必要。
mochi5o-work=独自ドメインのDir、test-mochi5o-work=サブドメインのDir
code:dir
$ ll
-rw-r--r-- 1 chillout.jp-bananabaum LolipopUser 224 3月 31 2020 ads.txt
drwx---r-x 2 chillout.jp-bananabaum LolipopUser 6 4月 9 2020 beat
-rw-r--r-- 1 chillout.jp-bananabaum LolipopUser 19 11月 2 23:08 index.php
drwx---r-x 5 chillout.jp-bananabaum LolipopUser 205 11月 2 22:33 mochi5o-work
drwxr-xr-x 2 chillout.jp-bananabaum LolipopUser 6 11月 2 23:08 test-mochi5o-work
$