サーバの引越しを委託されたときに、.htaccessの設定を調べたけれど、検索で上の方に上がる記事では残念ながら知りたいことがあまりわからなかったので、わかりやすく使わせていただいたサイトのまとめをしておきます。
引越前のサーバに置いた .htaccess完成品
条件は
- oldfile.phpにアクセスした時は、newfile.phpに転送する
- exceptフォルダ以下を除いて、そのままの構成で新サイトにリダイレクト転送する
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} ^.*/oldfile.php$ [NC] RewriteRule ^oldfile.php$ http://new.jp/newfile.php [R=301,L] RewriteCond %{REQUEST_URI} !(^/except/) [NC] RewriteRule ^(.*)$ https://new.jp/$1 [R=301,L] </IfModule>
リダイレクトのやり方
参考ページ:.htaccessを使ったよく使うリダイレクトまとめ
RewriteBaseは、リダイレクト後のパスのベース
RewriteBase は転送先が相対パスのときにしか意味がないそう。
つまり、サイトの引越が目的の方は不要な設定となります。今回は必要にならなかったので知識としてメモしておきます。
参考ページ:https://www.cherrypieweb.com/weblog/technical/20131017121752.php
以下、引用
もう一つ、勘違いしやすいものがあります。
RewriteBase です。
RewriteBase というからには、RewriteRule のベースになるのかと思いきや、実は、リダイレクト後のパスにのみ適用されます。
リダイレクト元のパスには適用されないので、もし、自身のディレクトリ以外のパスをリダイレクト元にしたいときは、きちんとしたディレクトリ指定が必要です。
もう一つ、RewriteBase は、リダイレクト先の指定が相対パスの時にしか適用されません。
ですので、リダイレクト先のパスの先頭に「/」をつけると、絶対パスと解釈され、RewriteBase は無視されます。
.htaccessが反映されないとき
<IfModule mod_headers.c> Header set Pragma no-cache Header set Cache-Control no-cache </IfModule>
特定のディレクトリ以外をhttpsへリダイレクト
参考ページ:https://kana-lier.com/web/redirect/
.htaccessのパラメータ説明
REDIRECTでの書き方(自動生成)
RewriteとRedirectの命令はやりたいことは被っているが、Rewriteの方が細かい設定ができる。その代わり、Rewriteはサーバによってはインストールされていないこともあるそうだ。
こちらのサイトはサーバに依存せず大抵使えるRedirect命令を使って、サイトの引越5パターンに合わせて
参考ページ:CMAN htaccess生成
正規表現
参考ページ:サルにもわかる正規表現