.htaccessでよく使う設定
Category
Other
PHPだとphp.ini、Apacheだとhttpd.confで様々な設定が可能ですが、共用サーバーを使っているような場合、これらのファイルを変更できない場合があります。
そのようなサーバー環境でも.htaccessを使って設定変更が可能です。
私がサイト制作の際、よく行う設定をいくつかご紹介します。
Keyword:.htaccess,URL統一,アクセス制限,リダイレクト
URLをwww有りかwww無しに統一する
WWW有りか無しどちらが良いかは一概に言えませんが、SEOやアクセス解析の観点からいうと、どちらかに統一することは大事です。
私の場合は、「Yahoo!のビジネスエクスプレスに申請する際、WWWなしで申請してもWWWありで登録されてしまう」と聞いたことがありますので、一応WWW有りで統一するようにしています。
.htaccess
#URLをwww有りに統一
RewriteEngine on
RewriteCond %{HTTP_HOST} ^webcreator-net\.com
RewriteRule (.*) http://webcreator-net.com/$1 [R=301,L]
.htaccess
#URLをwww無しに統一
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.webcreator-net\.com
RewriteRule (.*) http://webcreator-net.com/$1 [R=301,L]
URLにindex.htmlを表示しないでアクセス可能にする
Dreamweaver等のコーディングソフトでHTMLを記述すると、ローカル環境でリンク確認をするのに相対パスを使ってしまいがちです。
その場合、ページ遷移時に”http://webcreator-net.com/contact/index.html”といったように、”index.html”が表示されてしまいます。
これはあまりSEO的にもよくありませんし、どうせなら”http://webcreator-net.com/contact/”といったように表示させたいですよね。
その場合は以下を追記します。
.htaccess
#URLにindex.htmlを表示しないでアクセス可能にする
Options FollowSymLinks
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://webcreator-net.com/$1 [R=301,L]
こうするとルートディレクトリ以下全ての”index.html”が表示されなくなりますので、URLが2つに分かれて検索エンジン上に表示されることもなくなります。
PHPのmemory・post・uploadの上限を変更する
.htaccess
#PHPのmemory・post・uploadの上限を変更 php_value memory_limit 48M php_value post_max_size 36M php_value upload_max_filesize 24M
upload_max_filesize < post_max_size < memory_limitのようなサイズ関係になっている必要があります。
PHPの日本語環境設定
.htaccess
#PHPの日本語環境設定 php_value default_charset UTF-8 php_value mbstring.internal_encoding UTF-8
デフォルトの文字コードとマルチバイト文字列関数のエンコードをUTF-8にしています。
CGIの実行
.htaccess
#CGIの実行を許可 Options +ExecCGI #.cgiと.plをCGIスクリプトとして実行 AddHandler cgi-script cgi pl
サーバー上でCGIを実行可能にしています。
ExecCGIに”+”を付けるとCGIの実行をONに、”-“を付けるとOFFにできます。
また、CGIスクリプトを.cgiや.plで実行できるようにしています。
アクセス制限
.htaccess
#全てのアクセスを拒否 order deny,allow deny from all
サーバー上にtextファイルやdatファイルでパスワードが書かれたようなファイルがある場合、セキュリティ上良いとは言えません。
せめてパスワードを暗号化した上で、そのディレクトリ内はアクセス禁止にしておきましょう(もちろんそのディレクトリには、ブラウザからアクセスするのに必要なファイルは格納しないようにしましょう)。
最後にそれぞれの意味合いに関して
- 許可・一部拒否…order allow,deny
- 拒否・一部許可…order deny,allow
- 許可の対象…allow from 対象
- 拒否の対象…deny from 対象
1.は許可の対象と一部拒否の対象をいうと…という意味。
その後に3.4の順番で対象をあげます。
2.は拒否の対象と一部許可の対象をいうと…という意味。
その後に4.3の順番で対象をあげます。
例をあげると…
.htaccess
#一部のユーザーのアクセスのみ拒否 order allow,deny allow from all deny from 91.111.
許可の対象と一部拒否の対象をいうと…
許可の対象は”全て”、一部拒否の対象は、IP”91.111.”
.htaccess
#一部のユーザーのアクセスのみ許可 order deny,allow deny from all allow from 91.111.
拒否の対象と一部許可の対象をいうと…
拒否の対象は”全て”、一部許可の対象は、IP”91.111.”
リダイレクト 2012.1.29追記
.htaccess
#存在しないページのアクセスをTOPページにリダイレクト[1] ErrorDocument 404 http://webcreator-net.com #存在しないページのアクセスをTOPページにリダイレクト[2] RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ / [R=301,L]
404ページ(存在しないページ)をTOPページへリダイレクトさせます。
削除したページがGoogle等の検索エンジンに表示されているような場合に使用します。
“[1]”でも”[2]”でも結果は同じです。
[2]の”!-f”はファイルが存在しない場合に実行し、”!-d”はディレクトリが存在しない場合に実行するという意味です。
最終行の”RewriteRule”の記述でTOPページに転送します。
.htaccess
#サイト全体をリダイレクト Redirect permanent / http://www.webcreator-net.net/
ドメインを変更した場合等に使用します。
“permanent”の箇所は”恒久的に別のURLへ移動”といった意味を表し、”301″と書いても構いません。
.htaccess
#URL転送 Redirect permanent /information/ http://webcreator-net.com/topics/
“ルートディレクトリ以下のinformationディレクトリ”を”http://webcreator-net.com/topics/”にリダイレクトさせます。
注意点としては、転送元である”/information/”の箇所は”ルートディレクトリ以下のディレクトリ名”で指定し、転送先である”http://webcreator-net.com/topics/”の箇所は”絶対パス”で指定します。
ただし、同一サーバー内で転送する場合、ディレクトリ名が重複してはいけません(転送元に”information”ディレクトリがあり、転送先にも”information”ディレクトリがあってはいけません)。
これは、リダイレクト先のURLに転送元のディレクトリ名と同じ文字列が含まれている場合、無限ループに陥り、リダイレクト処理が正確に動作しなくなるためです。
.htaccess
#正規表現を用いたURL転送 RedirectMatch permanent /information/topics/topics1/ http://webcreator-net.com/information/topics/20111222-topics1/
正規表現を用いたURLの転送方法です。
例えば、指定ページのURLを指定のURLにリダイレクト処理させたい場合、”リダイレクト先のURLに転送元のディレクトリ名と同じ文字列が含まれている場合、無限ループに陥る”という問題が生じます。このような場合に”RedirectMatch”を使用することによって、無限ループを回避することができます。
注意点としては、何度もリダイレクト先を書き換えた.htaccessファイルをアップロードしていると、正常に動作しなくなったり、無限ループが発生する場合があります。この原因は、ブラウザにキャッシュが保存されている場合に起こりますので、ブラウザの設定でキャッシュを削除してやります。
また、Internet Explorerでは、キャッシュを削除しても動作が正常に機能しない場合があります。その場合は以下を試してみてください。
[ツール]→[インターネットオプション]→[詳細設定]より、Internet Explorerの設定をリセットの箇所にある[リセット]ボタンをクリックします。
※設定がリセットされるため、再設定する必要があります。
※Internet Explorerの動作が不安定になった場合に効果的です。
[当記事に関して]
「URLをwww有りに統一」「URLをwww無しに統一」「URLにindex.htmlを表示しないでアクセス可能にする」に関しては、URL表記後の“$1”の表示が反映されないため、Syntaxhighlighterを使用せずに記述しています。コピー&ペーストされる際は、ブラウザからテキストエディタへコピー&ペーストし、余分なスペース等が反映されていないか確認後、使用してください。
関連記事(※当記事と関連性が高いと思われる記事)
画像の直リンクを禁止する
2011/12/27
サーバーの設定変更
2012/02/17
APCでPHPの処理を高速化
2012/06/12
Internet Explorer9以前でもCSS3を使う
2012/03/04
HTML5導入前に覚えておきたいこと
2011/12/22
おすすめ書籍・商品(※当記事と関連性が高いと思われる書籍・商品)