リダイレクトについて

 

こんにちは、恵方巻きの季節ですね!
それにしても、無性にカラオケに行きたい気分です!

 

.htaccessの書き方というか、
リダイレクト処理がよくわかってなかったので、
いろいろ試してみたことを書きます。

 

リダイレクトとは?
→「出力先を変える」(=転送)です。

 

動きとして
その1、出力先のみを本来のものとは変える
例) https://ドメイン/old.htmlに アクセスしたけど、
出力内容はhttps://ドメイン/new.html である。

その2、出力先と表示URLを本来のものと変える
例) https://ドメイン/old.htmlに アクセスしたけど、
出力内容はhttps://ドメイン/new.html で、
URL欄もhttps://ドメイン/new.htmlになってる。

の2つがあるのかなって私は思ってます。

 

\ 想定動作 /
https://ドメイン/dummy/new.html にアクセスした
https://ドメイン/dummy/old.html の出力内容を表示させる。
※ .htaccess は dummy/ 直下に置くとする

 

まず、リダイレクトの可否を設定。
デフォルトはOffのため、
以下の記述をしないとリダイレクトはできませんでした。

RewriteEngine On

 

その1:
http://ドメイン/old.html でアクセスした時、
http://ドメイン/dummy/new.html の内容を表示する。
URL欄は http://ドメイン/dummy/old.html のまま

# オプション[L]で、以降のRewrite機能(RewriteRuleとか)の終了を意味する
RewriteRule ^old\.html$ new.html [L]

→ 正規表現パターン(^old\.html$)も置換パターン(new.html)も、
.htaccessがあるディレクトリからの相対パスっぽい。

….RewriteRuleの書き方

RewriteRule 正規表現パターン 置換パターン オプション

 

こんな書き方もある。

RewriteBase /dummy
RewriteRule ^old\.html$ new.html [L]

→ RewriteBaseは置換パターン(new.html)が相対パスの場合、使われる。
正規表現パターン(^dummy/old\.html$)に関係ないっぽい。

 

 

 

その2:
http://ドメイン/old.html でアクセスした時、
http://ドメイン/dummy/new.html の内容を表示する。
URL欄も http://ドメイン/dummy/new.html に変わる。

# [R]だけ(指定なし)だと302リダイレクト
RewriteRule ^old\.html$ /dummy/new.html [R]

→ http://ドメイン/dummy/new.html に。想定通り◎

 

RewriteRule ^old\.html$ /new.html [R] 

→ http://ドメイン/new.html に行っちゃう。

RewriteRule ^old\.html$ new.html [R]

→ http://ドメイン/home/アカウント/ドメイン/*****/dummy/new.html
にいってもうた!なんでだっけ?><

 

他にも2つもあり。

RewriteRule ^old\.html$ http://ドメイン/dummy/new.html [R]

↑個人的に絶対パスだし、見やすい。

RewriteBase /dummy
RewriteRule ^old\.html$ new.html [R]

 

 

■301リダイレクトを指定

RewriteRule ^old\.html$ http://ドメイン/dummy/new.html [R=301]

 

\ 疑問 /

■複数フラグのとき、書き順は関係ないの?

RewriteRule ^old\.html$ /dummy/new.html [L,R]
RewriteRule ^old\.html$ /dummy/new.html [R,L]

→ 挙動は同じに見えたので、関係なさそう?

ただ、

RewriteRule ^old\.html$ new.html [L,R]
RewriteRule ^old\.html$ new.html [R,L]

だと、http://ドメイン/home/アカウント/ドメイン/*****/dummy/new.html
にいってもうた![R]だけの時と同じ感じ。ってことは、R→Lの順番なのか?

 

フラグ「L」「R」について

L :マッチしたらRewriteを止めます。以降のルールは無視する

R :指定したURLに変える。[R=303]のようにリダイレクトコードも付加できる。

参考:http://japache.infoscience.co.jp/japanese_1_3_6/manual/mod/mod_rewrite.html

 

 

■301リダイレクトと302リダイレクトの違いは?
・301リダイレクト →キャッシュする
・302リダイレクト →キャッシュしない

 

 

 

\ まとめ /

まだまだ「?」が多すぎました。

 

 

投稿者:

kin29man

農学部卒の7年目エンジニアです👩‍💻 PHPとGASが好きです!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です