.htaccessに関する知識が甘かったので理解度を深める。

最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです！

#.htaccessで書かれている記述を理解する！
そもそも.htaccessの中身を理解する必要が発生して経緯

WordPressで作成してページで403 Forbiddenが出てしまったので、念のため調査したのがきっかけ
調べてみると
[WordPress引越しで403 Forbiddenが起きる原因と対処法](https://site-hikkoshi.com/3812//)
[WordPressの管理画面で403 Forbiddenが表示されたときに確認すべきことと、その対処方法 \| PC ウェブログ](https://www.pc-weblog.com/wordpress-403-forbidden//)


こんな物を発見！

これによると

####403エラーの原因と対処法
#####WordPressの引越しで起こる403エラー（Forbidden）の原因は主に以下の4つです。

-キャッシュ（履歴）が残っている
-ドメイン設定またはDNSの設定に問題がある
-「.htaccess」の記述に問題がある
-WAFの設定に問題がある
-フォルダのパーミッション設定に問題がある

そうなのか！
いい機会だから全部、チェックしないとと思い！
「.htaccess」のファイルの記述をvi .htaccessでみたところ。
中身はこんな感じだった（別の中身）
知らない記述がいっぱいあったので（笑）
解読には、内容を理解する必要があった。

```apache
# BEGIN WpFastestCache
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^example.com
# Start WPFC Exclude
# End WPFC Exclude
# Start_WPFC_Exclude_Admin_Cookie
RewriteCond %{HTTP:Cookie} !wordpress_logged_in_[^\=]+\=example-admin01
# End_WPFC_Exclude_Admin_Cookie
RewriteCond %{HTTP_HOST} ^example.com
RewriteCond %{HTTP_USER_AGENT} !(facebookexternalhit|Twitterbot|LinkedInBot|WhatsApp|Mediatoolkitbot)
RewriteCond %{HTTP_USER_AGENT} !(WP\sFastest\sCache\sPreload(\siPhone\sMobile)?\s*Bot)
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{REQUEST_URI} !(\/){2}$
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{QUERY_STRING} !.+
RewriteCond %{HTTP:Cookie} !comment_author_
RewriteCond %{HTTP:Cookie} !safirmobilswitcher=mobil
RewriteCond %{HTTP:Profile} !^[a-z0-9\"]+ [NC]
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/all/$1/index.html -f [or]
RewriteCond /home/example/example.com/public_html/example-page/wp-content/cache/all/$1/index.html -f
RewriteRule ^(.*) "/wp-content/cache/all/$1/index.html" [L]
</IfModule>
<FilesMatch "index\.(html|htm)$">
AddDefaultCharset UTF-8
<ifModule mod_headers.c>
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
</ifModule>
</FilesMatch>
# END WpFastestCache
# BEGIN GzipWpFastestCache
<IfModule mod_deflate.c>
AddType x-font/woff .woff
AddType x-font/ttf .ttf
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
</IfModule>
# END GzipWpFastestCache
# BEGIN LBCWpFastestCache
<FilesMatch "\.(webm|ogg|mp4|ico|pdf|flv|jpg|jpeg|png|gif|webp|js|css|swf|x-html|css|xml|js|woff|woff2|ttf|svg|eot)(\.gz)?$">
<IfModule mod_expires.c>
AddType application/font-woff2 .woff2
ExpiresActive On
ExpiresDefault A0
ExpiresByType video/webm A10368000
ExpiresByType video/ogg A10368000
ExpiresByType image/gif A10368000
ExpiresByType image/png A10368000
ExpiresByType image/jpg A10368000
ExpiresByType image/jpeg A10368000

ExpiresByType text/css A10368000
ExpiresByType text/javascript A10368000
ExpiresByType application/javascript A10368000
ExpiresByType application/x-javascript A10368000
ExpiresByType application/font-woff2 A10368000
</IfModule>
<IfModule mod_headers.c>
Header set Expires "max-age=A10368000, public"
Header unset ETag
Header set Connection keep-alive
FileETag None
</IfModule>
</FilesMatch>
# END LBCWpFastestCache
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteEngine on
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 2 weeks"
ExpiresByType image/gif "access plus 1 weeks"
ExpiresByType image/png "access plus 1 weeks"
ExpiresByType image/jpg "access plus 1 weeks"
ExpiresByType image/jpeg "access plus 1 weeks"
ExpiresByType text/html "access plus 1 seconds"
</IfModule>
# 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

```

これらの記述はこれを見たら理解でした！
[.htaccess の書き方（リダイレクト編）](https://qiita.com/shotets/items/1f8f308e008dcb96bf43/)

#####リダイレクトの基本記述
```apache

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^example.com
```

以下の記述はこれを見たら理解でした！
[.htaccess の書き方（スピードアップ編）](https://qiita.com/shotets/items/a5465fb41623cc3dae94/)

#####Cache-Controlヘッダーの記述

```apache

<ifModule mod_headers.c>
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
</ifModule>
```

####mod_deflate による圧縮の記述

```apache

<IfModule mod_deflate.c>
AddType x-font/woff .woff
AddType x-font/ttf .ttf
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
</IfModule>
```

####ブラウザキャッシュを活用する為のExpires ヘッダーの記述

```apache

ExpiresActive On
ExpiresDefault A0
ExpiresByType video/webm A10368000
ExpiresByType video/ogg A10368000
ExpiresByType image/gif A10368000
ExpiresByType image/png A10368000
ExpiresByType image/jpg A10368000
ExpiresByType image/jpeg A10368000
```

#振り返り
今回で.htaccessに記述されている内容をざっくり理解する事はできたがやはり実施に記述してみないと活用方法を実感できないのでどこかのタイミングで自分で作成する必要があると感じた。

##参考にした記事
・[ワードプレス(WordPress)のhtaccessの場所、作成方法、リダイレクトの設定 \| ワードプレスドクター](https://wp-doctor.jp/blog/2017/06/27/%E3%83%AF%E3%83%BC%E3%83%89%E3%83%97%E3%83%AC%E3%82%B9wordpress%E3%81%AEhtaccess%E3%81%AE%E5%A0%B4%E6%89%80%E3%80%81%E4%BD%9C%E6%88%90%E6%96%B9%E6%B3%95%E3%80%81%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC//)
・[WordPressで.htaccessファイルがない時の対処法 – FOXWP](https://fox-wp.com/how-to-find-wordpress-htaccess-file//)
・[.htaccess の使い方や書き方・設置方法/ Web Design Leaves](https://www.webdesignleaves.com/pr/html/htaccess.html/)