特定のファイル(URL)を除いたindex.htmlの有り、無しの統一


特定のファイル(URL)を除いたindex.htmlの有り、無しの統一 | Bamboo lath 日々の記録

特定のファイル(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)

参考サイト

楽:技林ブログ>mod_rewrite サンプル集

技林TOP > 自宅サーバ構築メモ > mod_rewrite

index.html「あり・なし」のURL正規化 – 301リダイレクト応用編

A Users Guide to URL Rewriting with the Apache Webserver

mod_rewrite モジュール URL 書き換えエンジン


コメントを残す

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