にしし ふぁくとりー(西村文宏 個人サイト)

Presented by Nishishi via Movable Type. Last Updated: 2015/09/22. 13:24:19.

動的なページを静的なページのように見せる

CGIやPHPなどで動的に生成しているページを、一見、静的なページのように見せる方法はいくつかあります。ファイル名をindex.cgiにする方法や、.htaccessファイルでファイル名が省略された場合にアクセスするファイルを指定する方法、mod_rewriteを使う方法などが挙げられます。

--- --- ---

CGIやPHPなどで動的に生成しているページは、HTMLなどの静的なページと比べて、検索エンジンに登録されにくいようです。理由は、動的に生成してんだから、同じURLで同じ内容が参照できるとは限らんからとか、パラメータがちょっと異なってても返されるのは同じ内容である可能性があるからとか、まあそんなとこでしょう。

実際には、パラメータの数が少なければ、ちゃんと拾ってくれるみたいですけどね。
私が管理している某所のフォーラム(BBS)も、1つ1つの投稿を単独で参照するためには、3~4個のパラメータが必要なんだけど、それでもちゃんと登録されてたし。(@Yahoo!)

Googleは、「パラメータの数が少なければ登録される」みたいなことをWeb上で公言してたと思いますが、Yahoo!も同様にパラメータの数が数個なら登録してくれてるようです。

というわけで、まあ、あんまり気にしなくてもいいかも知れませんが、それでもやはり、動的に生成しているページであると見せたくない場合、次のような方法があります。

まず、全くどんな設定もしたくない場合。^^;
CGIのファイル名を index.cgi にしておけば、ディレクトリ名だけでそのCGIにアクセスできる可能性があります。^^;
まあこれは、サーバがどう設定されているかに寄るんですけど、index.html がなくて、 index.htm もない場合、index.cgi を置いておけば、それが採用される可能性はあります。

次に、ディレクトリ名だけが指定された場合にアクセスされるファイル名を、自分で指定する方法。
これは、.htaccessファイルが利用可能でないといけませんが、それを使えば簡単に設定できます。

DirectoryIndex index.cgi index.shtml index.html index.htm

こんな感じで書いておけば、まず、index.cgi が探され、なければ index.shtml、それもなければ index.html、それもなければ index.htm が読まれます。それもない場合、ディレクトリ内のファイル一覧が表示されるか、もしくは、403エラーになります。

もちろんファイル名は index 以外でも構わないので、

DirectoryIndex moemoe.cgi

とか書いておけば、moemoe.cgi にアクセスされます。

この方法だと、CGIのファイル名を省略してCGIにアクセスできますが、パラメータがないと表示できない内容を表示させるには、やはりパラメータの指定が必要になるわけで、完全な解決策というわけではありません。

完璧に静的に見せるには、やはり、mod_rewriteを使う必要があるでしょう。
mod_rewriteを使って、例えば次のように書いてみると…

RewriteEngine on
RewriteRule ^(.+)-(.+)-(.+).html$ /hogehoge.cgi?page=$1&mode=$2&style=$3 [L]

…これだと、一見、拡張子.htmlのファイルにアクセスしているように見えて、実は内部ではhogehoge.cgiが実行されている…ということにできます。

表示上= http://www.example.com/moemoe-sakura-tan.html
     ↓
実際= http://www.example.com/hogehoge.cgi?page=moemoe&mode=sakura&style=tan

…のような感じで。
これなら、どんなパラメータでCGIを実行させる場合でも、外から見たら、ただのHTMLファイルにアクセスしているように見えます。

mod_rewriteモジュールを使ってURLを書き換えたい(2006/01/26)

コメント

こんにちは★
mod_rewriteのことで僕も頑張ってみました!
同じく、さくらを使っているのですが、
サクラの場合は rewritebaseをいれないと動かないようですよ!
もうすでにご存知かもしれませんが・・・orz

投稿者 通りすがり : 2009年10月05日 13:25

RewriteRule ^([0-9]+)/(.+)/(.+)/$ bbs.cgi?page=$1&mode=$2&style=$3 [L]
た・ぶ・ん・ですけど
飛ばす先にルートディレクトリの/スラッシュが無いからですできないのは。絶対パスでは出来てるので…
/bbs.cgi?...

投稿者 プーポン : 2010年05月17日 22:30

コメント数: 2件

コメント投稿欄 この日記に対するコメント投稿を歓迎します。

保存しますか?



※本文中にURLは書けません。(書くと投稿が拒否されますのでご注意下さい。)

※投稿内容は、実際にページ上に掲載される前に、管理者によって確認される設定にしている場合があります。その場合は、投稿後にその旨が表示されます。たいてい1~2日以内には表示されるはずですので、気長にお待ち願います。m(_ _)m

トラックバック

このエントリーへのトラックバックURLを表示するにはここをクリック
※スパム防止のため、トラックバックURLは別ウインドウで表示します。(JavaScriptが有効でないと表示されません。)

--- 当サイト内を検索 ---