htaccessですべてのURLに対して別の階層にリダイレクトさせるけどTopページは別にしたい
今回はApacheサーバを利用していて.htaccessですべてのURLに対して別の階層にリダイレクトさせるけどトップページはその対象ではないとき、どのように.htaccessを書けば良いのかについてご紹介いたします。
htaccessですべてのURLに対して別の階層にリダイレクトさせるけどTopページは別にしたい
最初に断っておきます。
この記事はかなり特殊な場合向けの記事となります。
私自身のメモ書きに近いですね。
.htaccessでRewriteRuleを設定して、特定の階層のみにすべてのURLに対してリダイレクトさせたい場合は、次のように書きますね。
1 2 |
RewriteEngine On RewriteRule ^(.*)$ public/$1 [QSA,L] |
しかし、トップページは別にしたいという思惑があったとします。
例として、「example.com」というドメインがあったとして、
example.com/*
は別の階層に繋がるようにしたいけど、
example.com/
だけはそのまま表示させたいという場合があったとします。
そんなときは、下記のように書きましょう。
1 2 3 4 |
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !(^(/|/index.html)$) RewriteRule ^(.*)$ public/$1 [QSA,L] |
ポイントは、RewriteCondを使って特定のURLのみ除くことです。
RewriteRuleの直前にRewriteCondを使って否定をとることで、そのURLのみ対象としないという設定をすることができます。
^/$
とすることで、正規表現でトップページを指定することができます。
また、
^/index.html$
も否定とすることでindex.htmlを対象外としなければならないことにも注意しましょう。
上記の.htaccessを設定することで、表題のすべてのURLに対して特定の階層に繋がるけど、トップページは別にするという要件を満たすことが可能となります。
終わりに
今回はApacheサーバを利用していて.htaccessですべてのURLに対して別の階層にリダイレクトさせるけどトップページはその対象ではないとき、どのように.htaccessを書けば良いのかについてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません