スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Masanori’s WebSiteの旧ページをmod_rewriteでリダイレクトさせるようにした

2009年09月22日 19:12

Masanori’s WebSiteは以前、
自作のCGIを用いてAjaxを活用したサイトになっていたのですが、
あんまり使い勝手が良くなかったし実験的だったので、
結果的に、その後、元に戻していました。

CGIを用いてAjax化するために、URLの構成などがかなり変わっていましたから、
旧サイト(CGIを用いてAjax化したサイト)から、新サイト(今のサイト)に、
自動でリダイレクト(転送)させるということは面倒くさくてやっていませんでした

しかし・・・未だに、Googleが一向に、旧サイトを検索結果から外してくれない上に、
旧サイトへアクセスされている方が居られるにも関わらず、
私は、旧サイトを既に更新しておらず放置状態
なので、
「さすがに、これはいけない・・・」と思い、リダイレクトを組むことにしました。

旧サイトのURLは次のような感じです。
パラメータ(クエリー)を含む、CGIのURL(動的URL)になっています。

対して、新サイトのURLは次のような感じです。
静的URLとなっています。

つまり変更をまとめると・・・

  • http://ohgita.info/pc2/が、http://ohgita.info/pc/に。
    (間違いそうですが、pc2が旧。pcが新なんですw)
  • 全てのHTMLファイルは拡張子が、shtmlに。(SSIを使用していますので)。
  • CGIを用いてファイルを出力していたため、ファイルのパスがパラメータに含まれていたのですが、
    新サイトでは普通にファイルそのままなので、ファイルのパスもそのままに

    (例: pc2/index.cgi?profiles.shtml → pc/profiles.shtml)

結構複雑です。なので、今回は、.htaccessでmod_rewriteを使うことにしました。
(やったことが無いので試行錯誤することになり、かなり時間がかかりましたw)

最終的に以下のような内容を記述した.htaccessファイルを、
Masanori’s WebSiteのルートディレクトリにおきました。

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (.*)\.html
RewriteRule ^pc2/ http://ohgita.info/pc/%1.shtml? [R,L]
RewriteCond %{QUERY_STRING} (.*)\.shtml
RewriteRule ^pc2/ http://ohgita.info/pc/%1.shtml? [R,L]
RewriteCond %{QUERY_STRING} (.*)/
RewriteRule ^pc2/ http://ohgita.info/pc/%1/? [R,L]
RewriteRule ^pc2/ http://ohgita.info/pc/? [R,L]

自分の備忘のためにも解説しておくと・・・。

RewriteEngine On
↑書き換えを有効にしています

RewriteBase /
↑ルートパスを指定しています(よくわかってないんですw

RewriteCond %{QUERY_STRING} (.*)\.html
RewriteRule ^pc2/ http://ohgita.info/pc/%1.shtml? [R,L]
↑URLが、^pc2/を含む場合で、URLのクエリに(.*)\.htmlが含まれているならば、
http://ohgita.info/pc%1.shtmlにリダイレクトして、以降の評価をキャンセル。

RewriteCond %{QUERY_STRING} (.*)\.shtml
RewriteRule ^pc2/ http://ohgita.info/pc/%1.shtml? [R,L]
↑URLが、^pc2/を含む場合で、URLのクエリに(.*)\.shtmlが含まれているならば、
http://ohgita.info/pc%1.shtmlにリダイレクトして、以降の評価をキャンセル。

RewriteCond %{QUERY_STRING} (.*)/
RewriteRule ^pc2/ http://ohgita.info/pc/%1/? [R,L]
↑URLが、^pc2/を含む場合で、URLのクエリに(.*)/が含まれているならば、
http://ohgita.info/pc/%1/にリダイレクトして、以降の評価をキャンセル。

RewriteRule ^pc2/ http://ohgita.info/pc/? [R,L]
↑URLが、^pc2/を含む場合、
http://ohgita.info/pc/にリダイレクトして、以降の評価をキャンセル。

あと・・・注意というかメモですが

  • RewriteRuleで定義している書換え後のURLは、
    末端に?(例:http://ohgita.info/pc/?)を入れておかないと、このURLの後に、
    勝手に、書換え前のクエリ文字列が付いてしまいます

    (逆に言えば、?を付けない場合、自動的に、書換え後のURLの後に、クエリ文字列を付けてくれます。)
    私はこれでツボったのでご注意を・・・w
  • RewriteRuleの対象文字列(1つめのパラメータで指定できる)には
    URLのクエリ部分は含まれませんのでご注意下さい。なので、例えば・・・
    RewriteRule index.cgi?(.*) http://ohgita.info/pc/index2.cgi?%1
    みたいにしても、書き換え後のURLの%1部分にクエリが代入されることはありません!
  • RewriteRuleの末端に書かれている、[R,L]は・・・
    Rオプションと、Lオプションです。
    このようにカンマを入れると複数指定できます。
    Rオプションは、302 Moved Temporailyを返すようにします。
    これを指定しない場合、Apacheが内部的に書き換えを行うだけになり、
    URLは変わらず、内容だけ書き換えされます。
    Lオプションは、条件にマッチした場合は、そこで評価を中断します。
    つまり、条件にマッチしたら、それ以降のRewriteRuleを評価しません。
  • 正規表現するときに・・・RewriteCondに記述した正規表現で抽出した文字列を、
    書換え後のURLに代入する場合は、%1、%2…のように記述する。

参考にさせていただいたWebページ



スポンサード リンク



コメント

    コメントの投稿


    (投稿者様のEmailアドレスが一般に公開表示されることで
    メールスパムの標的となってしまう事を防ぐために
    本項目はご入力いただいた場合も原則非表示としております。
    当ブログ管理人にEmailアドレスを伝えたい場合や、
    差し支えが無い場合にご入力ください。)
    (コメント編集・削除に必要)
    (管理者にだけ表示を許可する)

    トラックバック

    この記事のトラックバックURL
    http://masapiyo.blog53.fc2.com/tb.php/612-dd3f834f
    この記事へのトラックバック
    Creative Commons License
    Masanoriのマイペース。なブログ by Masanori is licensed under a Creative Commons 表示-非営利-継承 2.1 日本 License.

    最近の記事

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。