カテゴリー別アーカイブ: .htaccess

.htaccess mod_rewrite

サーバーサイドを中心としたアプリケーションでは, アクセスしたURLに関わらず, いったんリクエストをフロントコントローラーにリクエストを送り, 元のURLから対象となるコントローラー・アクション (メソッド) を呼び出す (ルーティング) という実装をします.

その場合に, 必要となるのが.htaccessのmod_rewriteの機能です. なぜなら, すべてのリクエストをいったんフロントコントローラーに送る必要があるからです.

といっても, そんなに難しいことではなく, 以下の数行を書いて対象のディレクトリに置いておくだけです. このサンプルでは, フロントコントローラー名はindex.phpとしています.

<IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteRule ^(.*)$ index.php [QSA,L]
</IfModle>

ちなみに, ロリポップのレンタルサーバーを利用している場合, IfModuleの部分があると動作しないので, 以下のように修正してアップロードしておきます (コメントアウトか消しておく).

#<IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteRule ^(.*)$ index.php [QSA,L]
#</IfModle>

.htaccessによる301リダイレクト

リダイレクトには2種類あり,

Status Code Description
301 恒久的なリダイレクトであり, SEO対策の観点からサイトの移転の場合などはこちらを利用するべき.
302 一時的なリダイレクトであり, POST後のリダイレクトなどで利用する.

 

301リダイレクトに関しては.htaccessで設定することができます.

例えば, 自分が作成しているアプリをgh-pagesに移行した場合,

(http://curtaincall.weblike.jp/portfolio-x-sound -> http://korilakkuma.github.io/X-Sound/ に移行したとします.)

Redirect permanent /portfolio-x-sound/ http://korilakkuma.github.io/X-Sound/

このように記述した.htaccessのファイルをリダイレクト元の, http://curtaincall.weblike.jp/portfolio-x-sound/
のディレクトリの直下に置いておくだけです.

これで, http://curtaincall.weblike.jp/portfolio-x-sound/以下のファイルにアクセスした場合は, すべてhttp://korilakkuma.github.io/X-Sound/にリダイレクトされます.

もっとも, もっと細かくリダイレクトを制御することも可能なので, そのあたりは,  (mod_rewirteを使う場合も同様に)より詳しく解説されているサイトがたくさんありますので, そちらを参考にして頂ければと思います.

302のリダイレクトは, 例えば, PHPであればおなじみ, header関数で ‘Location’ ヘッダーに絶対URLを指定するだけです.

エラーページへ遷移させる

ページが見つからない (404 Not Found), アクセス禁止 (403 Forbidden) などの場合に, オリジナルのエラーページに遷移させたい場合, .htaccessに以下の形式でルールを記述する.

ErrorDocument {ステータスコード} {エラーページのパス}

例えば, 404 Not Foundのときは, こんな感じ.

ErrorDocument 400 http://hogehoge.jp/errors/e400.html

それに関連して, おもしろいリンク集を発見

http://kachibito.net/web-design/japanese-404-design.html

 

Mac OS Xでmod_rewrite

備忘録的に…

1 . まずは, mod_rewriteが入っているか念のため確認

Apacheの設定ファイル /private/etc/apache2/httpd.conf に以下の行があって, かつ, コメントアウトされていないか確認

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

2.  /private/etc/apache2/users/{ユーザ名}.conf に以下の記述を追加

<Directory /Users/{ユーザ名}/Sites>
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

mod_rewriteを機能させるうえで重要なのは,

Options Indexes MultiViews FollowSymLinks
AllowOverride All

この2行.

1つめは, Mac OS Xでは, /etcは, /private/etcへのシンボリックリンクとなっているので, それをたどるように指示している感じ.

2つめは, .htaccessの設定を優先しますよ〜的な指示.

最後に, mod_rewriteを有効にしたいディレクトリに.htaccessを置いて, mod_rewriteのルールを記述します. こんな感じです.

#mod_rewrite
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

このルールによって, htmlの拡張子をURLに含めずに,

HTMLファイルにアクセスすることが可能になります.