こんにちは、恵方巻きの季節ですね!
それにしても、無性にカラオケに行きたい気分です!
.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リダイレクト →キャッシュしない
\ まとめ /
まだまだ「?」が多すぎました。