ブログをPHP化した場合
ブログをPHP化すると当然URLが以下のように変更になります。
(例) http://kazuizm.com/2005/10/google.html ⇒ http://kazuizm.com/2005/10/google.php
ということは、この古いほうのhtmlファイルを削除した時点で、検索エンジンから来た人など、古いURLを頼りにやってきた人たちは『Page not found』となってしまいます。![]()
というわけで、古いURLで来た人でも新しいURLに導く方法があります。
それが.htaccessというファイルです。![]()
※お使いのサーバが.htaccessが使えるかどうか確認する必要がありまする~
そもそも.htaccessというものは一体何?という人のために.htaccessの機能をまとめると、
1. アクセス制限(Basic認証)が可能。
2. 特定のホスト(IPアドレス。プロバイダ)からのアクセスを制限することが可能
3. 参照元(Referer)によるアクセス制限が可能(画像の直リンク禁止も可能)
4. 特定のユーザーエージェント(ブラウザ・ロボット)からのアクセス制限が可能
5. ブラウザ経由でのアクセス(http://~)を拒否することも可能(大切なデータファイルを守る)
6. リダイレクトが可能(ページの移転時などに重宝)
7. 404 File Not Foundページのカスタマイズが可能。
8. 拡張子別に文字コードを設定することが可能。(文字化け対策に必須の場合があります。)
9. index.cgiやindex.phpをトップページにすることが可能
10. MIMEタイプの設定が可能。ダウンロードされるべきでないファイルがダウンロードされるのを防ぐことができます。
11. SSIを「.html」で動かすことが可能
というようなものがあり、ここでやろうとしていることは6の「リダイレクト」というやつです。
記述方法はいたって簡単で、
Redirect permanent /2005/10/google.html http://kazuizm.com/2005/10/google.php
のように書きます。Redirect permanentのあとに「旧URLのパス部分+ファイル名」と「新URL」が続きます。
でも、エントリが何十個や何百とあったら、これをいちいち全部個別のエントリーごとに書いていたら大変すぎ。
てことで、MovableTypeにこの.htaccessを吐き出させましょうよ。
『テンプレート』⇒『インデックス』タブ⇒『テンプレートを新規作成』で
『テンプレート名』:.htaccess
『出力ファイル名』:.htaccess
『このテンプレートにリンクするファイル』:⇒何も書かない
『テンプレートの内容』:
Redirect permanent <$MTBlogRelativeURL$>index.html <$MTBlogURL$>index.php <MTArchiveList archive_type="Individual"> <MTEntries>Redirect permanent <$MTBlogRelativeURL$><$MTArchiveDate format="%Y/%m/"$><$MTEntryBasename$>.html <$MTBlogURL$><$MTArchiveDate format="%Y/%m/"$><$MTEntryBasename$>.php</MTEntries> </MTArchiveList> <MTArchiveList archive_type="Category"> Redirect permanent <$MTBlogRelativeURL$><$MTSubCategoryPath$>/index.html <$MTBlogURL$><$MTSubCategoryPath$>/index.php </MTArchiveList> <MTArchiveList archive_type="Monthly"> Redirect permanent <$MTBlogRelativeURL$><$MTArchiveDate format="%Y/%m/"$>index.html <$MTBlogURL$><$MTArchiveDate format="%Y/%m/"$>index.php </MTArchiveList>
これで『保存』した後、『このテンプレートを再構築』すれば完了。
.htaccessファイルが出来上がっています。
(例)
■トップページ
Redirect permanent /index.html http://kazuizm.com/index.php
■個別エントリ
Redirect permanent /2005/12/post_30.html http://kazuizm.com/2005/12/post_30.php
Redirect permanent /2005/12/post_29.html http://kazuizm.com/2005/12/post_29.php
Redirect permanent /2005/12/new.html http://kazuizm.com/2005/12/new.php
(~略~)
■カテゴリアーカイブ
Redirect permanent /010000/index.html http://kazuizm.com/010000/index.php
Redirect permanent /010000/010001/index.html http://kazuizm.com/010000/010001/index.php
Redirect permanent /010000/010005/index.html http://kazuizm.com/010000/010005/index.php
(~略~)
■月別アーカイブ
Redirect permanent /2005/12/index.html http://kazuizm.com/2005/12/index.php
Redirect permanent /2005/11/index.html http://kazuizm.com/2005/11/index.php
Redirect permanent /2005/10/index.html http://kazuizm.com/2005/10/index.php
(~略~)
■確認方法
TELNET等でサーバに入れる場合:
[root@linux kazulog]# cat .htaccess Redirect permanent /index.html http://kazuizm.com/index.php Redirect permanent /2005/12/post_30.php http://kazuizm.com/2005/12/11-230056.php Redirect permanent /2005/12/post_29.php http://kazuizm.com/2005/12/10-232105.php Redirect permanent /2005/12/new.php http://kazuizm.com/2005/12/09-100300.php Redirect permanent /2005/12/post_28.php http://kazuizm.com/2005/12/06-123615.php (以下略)
TELNETで入れない場合、FTPソフトで.htaccessファイルをダウンロードしてエディタで開いて確認
これでどんな古いURLでアクセスされてもばっちり新しいURLへ転送されます。
試しにhttp://・・・/・・・.htmlへアクセスしてみて、きちんとhttp://・・・/・・・.phpにリダイレクトされることが確認できたら、必要のないHTMLファイルは削除しておきましょう。
そうすれば、いずれGoogleなどの検索エンジンも新しいほうのURLでインデックスし直します(してくれるはずです・・・)
→この古いファイルの削除作業はエントリ数が多いと非常に大変なのですが、こちらのやり方でやれば簡単に一発で削除できますのでお試し下さい![]()
ブログをPHP化後、エントリのURLを日付ベースにしたい場合(URLの固定化)
通常はhttp://kazuizm.com/2005/11/post_22.phpのようにエントリのファイル名(Permalink)はpost_22.phpとなります。このままでもいいのですが、サイトの引越しでサーバが変わる場合などはこれだとexportしてimportすると記事を削除したことがあるような場合に、記事番号がずれてしまってリンクが狂ってしまうようです。![]()
だので、絶対に変わらないPermalinkにしたいなら、日付ベースがいいです。
私もつい最近日付ベースに変更しました。
変更方法は以下。
①アーカイブマッピングを変更
ブログの『設定』⇒『公開』の下のほうにある、アーカイブ・マッピングの『エントリ』の部分を見ます。
すると、デフォルトでは『yyyy/mm/entry_basename.php』となっています。(PHP化してあることが前提)
ここで、プルダウンから『カスタマイズする』を選択。すると、編集できるようになるので、以下を記述。
%y/%m/%d-%h%n%s
そして、『保存』後、「ブログを再構築」で全体を再構築します。
これで
http://kazuizm.com/年/月/日-時分秒.php
となります。
この時点では上記のファイル名(Permalink)と以前に構築した古いPermalink(post_22.phpなど)の両方が存在します。
②.htaccessで古いPermalinkを新しいほうに導く
ここでまた.htaccessの出番です。当然MovableTypeに生成させます。
先ほど『ブログをPHP化した場合』の項で使用した.htaccessも生かす場合は、単純に.htaccessのテンプレートに追記でOK(本当は直接HTMLファイルから日時.phpに導くのがスマートですが。)
もし、こちらだけをやる場合(まだ.htaccessがない場合)は、以下手順で。
『テンプレート』⇒『インデックス』タブ⇒『テンプレートを新規作成』で
『テンプレート名』:.htaccess
『出力ファイル名』:.htaccess
『このテンプレートにリンクするファイル』:⇒何も書かない
『テンプレートの内容』:
<MTArchiveList archive_type="Individual"> <MTEntries>Redirect permanent <$MTBlogRelativeURL$><$MTArchiveDate format="%Y/%m/"$><$MTEntryBasename$>.php <$MTBlogArchiveURL$><$MTEntryDate format="%Y/%m/%d-%H%M%S"$>.php </MTArchiveList></MTEntries>
さっきのHTMLファイル⇒PHPへのリダイレクトに追記する場合(既に.htaccessがある場合)は、
『テンプレート』⇒『インデックス』タブ⇒『.htaccess』をクリック
『テンプレートの内容』の後ろに以下を追記
<MTArchiveList archive_type="Individual"> <MTEntries>Redirect permanent <$MTBlogRelativeURL$><$MTArchiveDate format="%Y/%m/"$><$MTEntryBasename$>.php <$MTBlogArchiveURL$><$MTEntryDate format="%Y/%m/%d-%H%M%S"$>.php
これで『このテンプレートを再構築』をやれば.htaccessファイルが作成されています。
TELNET等でサーバに入れる場合:
[root@linux kazulog]# cat .htaccess Redirect permanent /index.html http://kazuizm.com/index.php Redirect permanent /2005/12/post_30.php http://kazuizm.com/2005/12/11-230056.php Redirect permanent /2005/12/post_29.php http://kazuizm.com/2005/12/10-232105.php Redirect permanent /2005/12/new.php http://kazuizm.com/2005/12/09-100300.php Redirect permanent /2005/12/post_28.php http://kazuizm.com/2005/12/06-123615.php (以下略)
TELNETで入れない場合、FTPソフトで.htaccessファイルをダウンロードしてエディタで開いて確認
③リダイレクトの確認
古いURLでアクセスして、新しいURLに飛ばされていることを確認
http://kazuizm.com/2005/12/post_30.php ⇒ http://kazuizm.com/2005/12/11-230056.php
④古いファイルを削除
サーバにTELNETで入るなり、FTPソフトなりで、/年/月/post~.php や/年/月/(その他英語のファイル名)~.phpのファイルを削除します。
そうすれば、いずれGoogleなどの検索エンジンも新しいほうのURLでインデックスし直します(してくれるはずです・・・)
→この古いファイルの削除作業はエントリ数が多いと非常に大変なのですが、こちらのやり方でやれば簡単に一発で削除できますのでお試し下さい![]()
まとめ
この.htaccessというファイル、冒頭にも書きましたが、いろんなことができます。
URL転送の中でも正規表現を使って、gifやjpgファイルだけ他のサーバのものを読みに行かせたり(ディスク容量が逼迫してるときなど)、cgiへのアクセスだけ、逆プロキシを利用して、バックエンドにあるApacheへ渡して動作させたり(mod_perlを使う場合に効果絶大!実はうちのサーバでもやってます)。
ここらへんはおいおい記載していきます。時間がねーーー![]()







