特定のファイル(URL)を除いたindex.htmlの有り、無しの統一
mod_rewriteは何度調べても全然覚えられません。。
SEO関連で調整するよう言われたので調査。
index.htmlの有り、無しの統一というありがちな話。
こんな感じ。
hogehoge/index.htmlをhogehoge/にする。
ただ今回は特定のファイル(URL)の場合を除くという指令。
サンプルフォルダ構成
— base
|– a
| `– index.html
|– b
| `– index.html
|– c
| |– cc
| | `– index.html
| `– index.html
`– index.html
.htaccessの記述
RewriteEngine on
RewriteCond %{THE_REQUEST} !^.*/b/index.html
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://example.com/base/$1 [R=301,L]
この場合
http://example.com/base/b/index.html
だけindex.htmlが書き換えられない。
RewriteCondは連続して書くとANDになるから。
ORでつなげたい場合は[OR]をつける
RewriteCondの条件で大文字小文字を区別しない場合は[NC]をつける
■RewireRuleの書式
RewriteRule Pattern Substitution [flags]
くわしくはこちら
■flagsの種類
- redirect|R [=code] (強制 redirect)
- forbidden|F (URL を強制的に forbidden(禁止)にする)
- gone|G (URL を強制的に gone(消去済み)にする)
- proxy|P (強制 proxy)
- last|L (last(最後の)ルール)
- next|N (next(次の)一周)
- chain|C (次のルールにchained (チェイン))
- type|T=MIME-type (MIME type の強制指定)
- nosubreq|NS (内部の sub-request が no (ない) 時のみ 使われる)
- nocase|NC (no case)
- qsappend|QSA (query string append)
- noescape|NE (no URI escaping of output)
- passthrough|PT (pass through to next handler)
- skip|S=数字 (skip next rule(s))
- env|E=VAR:VAL (set environment variable)
参考サイト
技林TOP > 自宅サーバ構築メモ > mod_rewrite
index.html「あり・なし」のURL正規化 – 301リダイレクト応用編
A Users Guide to URL Rewriting with the Apache Webserver
mod_rewrite モジュール URL 書き換えエンジン