▼Menu

htaccess機能を使ったページやサイトの転送

htaccessファイルは特別なファイルで、これを使ってサーバーの移転をしたり、ページの移転をしたり、モバイルとパソコンで見せるページを分けたりを簡単に実現することができます。


広告

.htaccessファイルの特徴

.htaccess ファイルは、 サーバー楽天 の動作を制御する設定ファイルで、各ユーザーが、各ディレクトリ単位で設定できる特別なテキストファイルです。ファイル名が無く拡張子のみのファイルです。テキストファイルの為、FTPでのアップロードはテキストモードで行なう必要があります。

.htaccess ファイルは、設置したディレクトリおよびその下のサブディレクトリ全体に影響を及ぼします。

サーバーによっては.htaccess ファイルを設置できないところもあります。無料のホームページスペースでは置けないところが多いようです。

.htaccessを使ったモバイルサイトへの振り分け

モバイルサイトとパソコン用のサイトを作って、携帯電話でアクセスした人を自動でモバイルページへ飛ばす方法を紹介します。サイトのルートディレクトリに次のような内容の.htaccess ファイルを置きます。

しかし、この方法は携帯電話で普通のページも見られなくなります。最近は携帯電話でパソコン用のページを見るのが普通になってきていますので、これはあまり意味がありません。

この反対に、パソコンでモバイル専用ページを見えないようにするのが良いと思います。

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^(DoCoMo|KDDI|DDIPOCKET|UP\.Browser|J-PHONE|Vodafone|SoftBank)
RewriteRule ^$ /m/ [R]

携帯電話でアクセスするとユーザーエイゼント(HTTP_USER_AGENT)にDoCoMoとかKDDIとかの文字列を含んでいると、http://ドメイン/m/ のファイルに飛ばすのです。

「^$」の「^」は行の最初を、「$」は行の最後を表わします。つまり何も無い(http://ドメイン)ということです。「[R]」は転送の意味です。

私の場合はこれ以外何もしなくても問題ありませんでしたが、この.htaccessファイルを置いた直下のディレクトリには

RewriteEngine Off

を記述した.htaccessファイルを置いた方が良いでしょう。

.htaccessを使ってトップページに飛ばす方法

私は使ったことがありませんが、時々「トップページ以外には直接リンクを禁止」と書いているサイトがあります。ホームページで公開しておきながら、HTMLファイルへの直リンクを禁止するのはおかしいとは思います。しかし、どうしてもこれをやりたい場合の参考になると思います。

上記の.htaccessを使ったアクセス制限(直リンク禁止、直接リンクを禁止)を使用してトップページ以外のファイルに対してアクセス制限(直リンク禁止、直接リンクを禁止)をします。

次に下記の.htaccessリダイレクトを使ったホームページの移転で述べている、存在しないファイルやエラーが出た時(403: Forbidden, 404: File Not Found)に、トップのページへ転送させる方法も適用します。

.htaccessを使ってトップページのアドレスを指定しない方法

トップページのアドレスは普通index.htmやindex.phpのようになっていて、ホームページのアドレスはhttp://example.net/と書いて、indexファイルを指定しないのが普通です。この方法だとindex.htmからindex.phpに変更しても、ホームページのアドレスを変更する必要はありません。

しかし、インデックスファイルを指定していなくても、検索にインデックスファイルを含んだページが登録されてしまうことがあります。SEOの点ではこれは好ましくないので、htaccessを使ってトップページのアドレスをindexファイルの無いものに統一しましょう。例えば、http://mydomain/index.phpにアクセスがあった場合にhttp://mydomain/に301で永久転送する方法です。

なお、これは他の設定によっては無限ループの可能性がありますので注意してください。ファイルの拡張子が、index.php または index.htm または index.html の場合は、ファイル名を取り去ってから、この内どれかのファイルがあれば、そこにアクセスします。条件はきびしく指定した方が間違いがありません。

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{THE_REQUEST} (^.*/index\.php|^.*/index\.htm)
RewriteRule ^(.*)index\.(php|htm) /$1 [R=301,L]

.htaccess301リダイレクトを使ったホームページの移転

今回ホームページを息子の使っているサーバーからアスナロネット(as76.net)に移転しました。ファイルもディレクトリ構造もほぼ同じなので、.htaccessファイルのりダイレクト機能で行なってみました。非常に簡単で効果的だったので紹介します。

もしこれを使わないと、100以上ある全てのHTMLファイルを変更して、新しいページへ転送する記述をしないといけません。つまり次のような記述を移転前の全てのページにします。CONTENT= の所を "0" にすると、永久的な移転となります。それ以外では、一時的な移転とみなされることがあります。

<html>
<head>
<meta HTTP-EQUIV="Refresh" CONTENT="0;URL=http://as76.net/*****.htm">
</head>
</html>

これと同じ動作をさせるものを、.htaccessファイルひとつで簡単に作ることができます。つまり次の記述をした .htaccess ファイルを http://www.car-e.net/~dai/ のディレクトリに作成します。

Redirect permanent /~dai/ http://as76.net/
ErrorDocument 404 http://as76.net/
ErrorDocument 403 http://as76.net/

この1行目で、http://www.car-e.net/~dai/ 以下のファイルにアクセスがあると、 http://as76.net/ の中のファイルに直接転送(リダイレクト)されます。 /~dai/ 部分は http://www.car-e.net/~dai/ のドメイン部分以前を除いたもの(/で始まる)にします。

2〜3行目は、http://www.car-e.net/~dai/ にアクセスしても存在しないファイルやエラーが出た時(403:Forbidden, 404: File Not Found)にも、トップのページへ転送が行なわれるようにする為です。

この2〜3行目の記述は新しい移転先サーバーでも使えます。つまりhttp://as76.net/ のディレクトリにこの2〜3行目を記述した.htaccessファイルを置けば、それ以下で起こったエラーでは http://as76.net/ のトップページに転送されます。

この方法はHTMLファイル名を変更したり、削除した場合でも、トップページへ飛ばすことができて非常に便利です。もちろん.htaccess の使えないサーバーではこの方法は使えません。

一般的に、ファイルが存在しない場合で、404リダイレクトでファイルが存在しない事を伝える場合は、次のようにhttpから記述せず、404.phpにリダイレクトします。前記の方法では404になりません。

ErrorDocument 404 /404.php

Redirect 301と記述する方法も実験

htaccessを使ってRedirect 301と記述する方法(ファイルの永久移転)を使ってファイルの転送も試してみました。htaccessファイルに次のように記述しました。View HTTP Request and Response Headerを使ってちゃんとHTTPステータスコード301で転送されているかどうか確認しましょう。

redirect 301 /earth.htm http://as76.net/asn/earth.htm

ファイルの拡張子をhtmからphpへ変更(永久移転)

私は.htaccessを使用してhtmlファイルをPHPで動作させる方法を使っていました。PHPを動作させるファイルの拡張子をphpだけでなくhtmやhtmlでも使えるようにするには.htaccessファイルに次の行を追加します。

AddType application/x-httpd-php .htm .html

しかし、いつまでもhtmlファイルを使っていたら、Expression Web3 でファイル保存時に拡張子が違うというエラーになる等の不都合を感じるようになりました。そこで、全ファイルの拡張子をhtmからphpへ変更したので、ファイルの永久移転(301移転)を.htaccessで設定しました。全てのhtmの拡張子をphpに変更してから次のように設定しました。

DirectoryIndex index.php index.html
RedirectMatch permanent (.*)\.htm$ $1.php

DirectoryIndex はXrea と Coreserver では使わないようにとのことですので、私は現在は次のようにしています。

RewriteCond %{THE_REQUEST} !(^.*/index\.htm)
RewriteCond %{THE_REQUEST} ^.*\.htm
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.htm /$1.php [R=301,L]

これは、index.htm と index.html 以外の htm と html 拡張子を、もしファイルが無ければ php に変更するものです。この場合も条件をちゃんと指定します。これは拡張子を間違えて入力した場合でも php のファイルがあれば表示しますので便利です。

サイトのディレクトリーの一部変更

サイトを運営していると、ディレクトリーの一部を削除したり、ディレクトリー名を変更したりすることがよくあります。変更した以降のディレクトリーやファイル内容が同じ場合のファイルの転送方法は次のようにします。例として、http://hoge.jp/abc/***.htmlをhttp://hoge.jp/def/***.htmlに変更した場合です。

RewriteCond %{THE_REQUEST} ^.*/abc/.*
RewriteRule ^abc/(.*) /def/$1 [R=301,L]

ここで注意することは、RewriteRule の "^" の後には "/" を書いてはいけないということです。また、この後の書き換えでは "/" が必要なことです。

スポンサーリンク

wwwの有無にかかわらずアクセスできるサーバーの設定

私の使っているサーバーでは、http://mydomain/ だけでホームページが表示されて、http://www.mydomain/ ではホームページの表示ができませんでした。

wwwが有る場合と無い場合の両方で表示できるようにならないものかと思って色々やっていたら、うまくできるようになりました。それはサブドメインとして、www.を登録する方法です。

つまり、ドメインの設定でサブドメインに www.mydomain を登録して、 http://mydomain/ に転送を設定するだけです。ただし、この方法は302移転になることを確認しました。

 
Main Menu |Mobile |Top Page |電気、電器 |工夫と製作 |アンテナ |デジタル放送 |修理技術1 |修理技術2 |修理過去ログ |電気柵 |生活情報 |健康情報 |名所旧跡 |ネット環境 |WordPress |写真集 |English Top
リンク集 |Sitemap |お問合せ |Pポリシー |修理掲示板
ネット環境 Menu |BBS迷惑書込 |迷惑Mail |Mail送信規制 |nPOP使い方 |BBSログ変換 |過去ログ表示 |MailCGI改造 |HPフォルダ構造 |サーバ引越 |英語サイト作り方 |二ヶ国語相互リンク |携帯サイト作り方 |XHTML Basic |XHTML Mobile P |携帯アクセス制御 |PC携帯両用サイト |サブドメイン同期 |XHTMLに書換 |TEXTメニュー |新ウィンドウに表示1 |新ウィンドウに表示2 |外部トラッキングコード |メニュー配置 |HTML一括変更 |ファイル取込 |ヘッドタグ共通化 |外部CSS |CSSコマンド |印刷用CSS |標準,互換モード |段組 |表示の速いHP |HP横幅 |HP背景 |HP文字 |HP見出し |HPタイトル |画像使い方 |altとtitle属性 |アクセスアップ |サイトマップ作成 |RSS配信 |自ドメインRSS |RSS使い方 |htaccess転送 |パラメータ削除 |wwwの有無と統一 |アクセス制限 |Adsenseクリック規制 |Adsense表示規制 |Google広告配置 |チャネルの設定 |ブログ人に広告配置 |ランダム画像切替 |デザイン自動切替 |フォルダ名取得 |Google+1ボタン |いいねボタン |Facebookのコメント |HPビルダ起動時間 |Expression Web |複数パソコンHP更新 |FFFTP使い方 |文字大きさ |モニタの選び方 |タッピング |ページ内検索 |ショートカットキー |Thumbs.db |日本語FEP |上手な日本語変換 |データ伝送 |MTUとMSS
山里の素人農業 |Daii-Wiki |私のブログ |Car Evolution |Tomy's HP |ページの先頭
 
 
as76.net
RSS
 
楽天市場
広告
Valid XHTML 1.0
Only OGP error
更新日:2011/12/11