For Want Of A Better Word

【URLリダイレクト】mod_rewrite・RedirectMatchサンプル

      2015/09/14

ぽつぽつ使う機会が多いので、メモっておく。

参考リンク集

Apacheのmod_rewriteモジュールの使い方を徹底的に解説

バージョン2.4 mod_rewrite概説

バージョン2.4apache環境変数の値リスト

 

mod_rewritesサンプル

●最初に

  1. .htaccessはドキュメントルートに存在する想定。
  2. ・Rewriteルールの左側がマッチ条件。右側がリダイレクト。
  3. RewriteBaseはリダイレクト先の起点設定。リダイレクト先は「/」で始めればドキュメントルートから。「/」なし相対パスで記述するとRewriteBaseから始まる。ちゃんとパスをかくなら、RewriteBaseは記述不要と。
  4. ・RewriteRuleの左側、マッチ条件はhtaccessの配置しているディレクトリ起点。頭に「/」はいらない。

基本

●シンプルなリダイレクト

[補足]
ルールの最後につくフラグについて

・Lはlast以後のルールは見ない。
・Rはリダイレクト(URLが変わる。) = はリターンコード

●サブディレクトリ内も指定可能以下のファイルの指定も可能(以下rewritebase省略)

 

●特定ディレクトリ以下を別ディレクトリ以下の同一ファイル・サブディレクトリへ
ディレクトリをごそっと移動した時とか。

 

ルート・フォルダ直下

●「/(ルート)」に対してのアクセスをリダイレクトする。[^$]
ルートって

 

●「/(ルート)」「フォルダ」直下のファイルだけをリダイレクト。(サブディレクトリは含まない)

 

<ちょっと補足>
RewriteRuleno内容は「 /を含まない文字列 繰り返しだったらパスを引き継いでfuga/に転送」ということ。

  1. ・/を含まない⇒(?!/)
  2. ・/を含まない文字の集合⇒(?!/) .
  3. ・/を含まない文字の集合の繰り返し ⇒( (?!/) . ) *
  4. ・$1でリダイレクト先に値を渡すため ⇒( ( (?!/) . ) * ) # 完成!!

Aliasで設定している領域(cgi-bin)等

公開領域(ドキュメントルート)のファイルから、alias領域にリダイレクトは今まで同様。

aliasの領域から公開領域にリダイレクトする場合は、各設定はalias領域に対してなされないといけない。

  • AllowOverWride の許可
  • htaccssの設置

●例)cgi-bin配下でリダイレクト

  • ・/var/www/cgi-binにaliasとしてcgi-binを設定
  • ・/var/www/cgi-bin/.htaccessを設置。
  • ・cbi-bin/exe.cgi⇒cbi-bin/exe2.cgiにリダイレクト

 

 

マッチさせたいディレクトリに.htaccessを入れるがの一番分かりやすいか…

 

404のリダイレクト

デフォルトはこんな感じ。

 

リダイレクト先にドメインを含まない場合はURLが変わらない..
ドメインまで含めるとURLの変更が出来る

ErrorDocument 404 /index.html #(URL変更なし)
ErrorDocument 404 http://example.com/index.html #(URL変更あり)

後者はリターンコードがリダイレクト先のものになるため、おすすめしないとapacheさんも宣言。

404ページは404を返して、そのURLは存在しないという旨をユーザーにも分かりやすくして、

次の導線に行ってもらうのがよいか。

 

その他逆引きー

URLパスを引き継いで、異なるドメインにリダイレクト

RedirectMatch

 

 

・ちなみにRedirectMatchはmod_aliasというモジュールの機能
・RewriteCond-RewriteRuleってやつはmod_rewriteの機能

だそう。

http,httpsプロトコルの変更

・ http⇒httpsへリダイレクト

 

・ https⇒httpへリダイレクト

 

 特定IP以外をリダイレクトする(メンテナンス用リダイレクトとか) mod_rewrite

ErrorDocument 503 /maintenance.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/maintenance.html
RewriteCond %{REMOTE_ADDR} !=192.168.8.1  #許可IP1
RewriteCond %{REMOTE_ADDR} !=192.168.8.1  #許可IP2
RewriteRule ^.*$ – [R=503,L]
</IfModule>

※OR条件の場合は Cond行の末尾に [OR]を記述する

 

こんな感じ。

 - apache, インフラ

  関連記事

027
windows7 Professional に windowXPモード と VirtualPCをインストール。

とりあえず windowsでLinuxの仮想環境を立てるため、お手軽そうなVir …

apache-logo
CentOS5とDjango

http://www.rnsk.net/blog/python-10%E5%88 …

apache-logo
プログラミングPHP 第15章(WindowsでのPHP)ポイント

PHPは完全なクロスプラットフォームではない。利用できる、関数が一致しなかったり …

027
VmwareServerでCent6を入れると再起動時にカーネルパニックになる。

なんで?

027
ゲートウェイ

ゲートウェイとは、ネットワーク間の接続を中継する機器、または、ソフトウェアのこと …