サーバの引越しを委託されたときに、.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のパラメータ説明

{REQUEST_URI}などの中身の説明
 
 
 

REDIRECTでの書き方(自動生成)

RewriteとRedirectの命令はやりたいことは被っているが、Rewriteの方が細かい設定ができる。その代わり、Rewriteはサーバによってはインストールされていないこともあるそうだ。

こちらのサイトはサーバに依存せず大抵使えるRedirect命令を使って、サイトの引越5パターンに合わせて

 

参考ページ:CMAN htaccess生成

 
 

正規表現

参考ページ:サルにもわかる正規表現

 
 
今度は時間がかからないようにしたいです。