mod_rewrite モジュール
https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html
RewriteRuleディレクティブ
書き換えのルールを決めるディレティブ。パターンで一致した値を置換文字列で書き換えます。 条件パターンはPerl互換の正規表現で指定する。
(書式)
RewriteRule 条件パターン 置換文字列 [フラグ]
RewriteCondディレクティブ
書き換えの条件を指定する。この条件に一致した場合だけ書き換えが行われる。
(書式)
RewriteCond テスト文字列 条件パターン オプション
例)ファイルが存在する場合、後に続くパターンで書き換えを行う
RewriteCond %{REQUEST_FILENAME} !-f
参考サイト
Apacheのmod_rewriteモジュールの使い方を徹底的に解説
https://oxynotes.com/?p=7392
設定有効化
/etc/httpd/conf/httpd.conf
vi /etc/httpd/conf/httpd.conf
(追加)
LoadModule rewrite_module modules/mod_rewrite.so
記述例
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(viral-community\.com)(:80)? [NC]
RewriteRule ^(.*) http://●●●●●.com/$1 [R=301,L]
# 「viral-community.com」ドメインにアクセスしたら、「●●●●●.com」ドメインへリダイレクト
解説
● RewriteEngine on
「Mod_Rewrite」機能の有効化
● RewriteCond
次の「RewriteRule」を実行するかどうかの条件文になります。
「RewriteCond」の条件を通れば、次の「RewriteRule」は実行され、通らなければ実行はされません。
「RewriteCond A B 」となり、A と B がマッチすれば、次の「RewriteRule」が実行されます。
[NC]・・・RewriteCondのオプション。[NC]は、大文字小文字を区別しない。
● RewriteRule
URL変更(リダイレクト)を行うルールの定義文。
「RewriteRule A B 」、ユーザーからリクエストのあったURLが「A」であれば、「B」のURLへリダイレクト。
^(.*)・・・すべて正規表現。”任意文字の連続”。(「.*」 の組み合わせはよく使われる)。要は、どのようなURLでもOK!
http://●●●●●.com/$1・・・リダイレクト先のURL。
$1 は、同じ行で使われている「正規表現の()で括った部分に、マッチした文字列」を参照するといった意味になります。
[R=301,L]・・・RewriteRule のオプション。
今回は、二つ「R=301」と「L」が指定されています。
「R=301」のRとは ”リダイレクトのR” で、「R=301」とする事で、301リダイレクトを指定する事になります。
また、301を指定しない場合(「R」のみの場合)は、302リダイレクトとなります。
「L」ですが、こちらは ”LastのL” となり、(「L」が指定されている)RewriteRuleの条件にマッチした場合、
以降のRewriteRuleを処理しない事を意味します。
常時 SSL化
# BEGIN SSL CONF
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# END SSL CONF
.htaccess FULL
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off
SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
末尾に記載した場合、WordPressの設定によっては httpsへ転送されないケースがあるらしい。 なので先頭に記述。
## さくら https://help.sakura.ad.jp/hc/ja/articles/206054622--htaccess%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E5%BE%A1