静的なHTMLサイトで拡張子「.htmlあり」でも「なし」でもアクセスできる方法

静的なHTMLサイトを作って、ファイル名を.htmlとした場合などに「拡張子あり」でも「拡張子なし」でもアクセスできるようにしたいことはないだろうか?
はじめに答えを行ってしまうと.htaccessファイルの冒頭に下のような記述をすれば実現できます。
# html拡張子なしでもアクセス RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^(.*)$ $1.html
さて、需要はあるだろうか?
拡張子の有無に悩むシチュエーション
先日久しぶりに静的になHTMLサイトを作ってみた。
正しくは、もともとWordpressで運営していたサイトを実験的にHTMLサイトにしたのです。
WordPressで書いた記事をHTMLサイトに置き換えるのは手動でシコシコやるとして、悩まされたのは「パーマネントリンクをどのように置き換えるか?」です。
例えば、Wordpressで下のようなURLの個別記事があったとします。
例)http://example.com/archives/123
ここで書かれた記事をHTMLファイルとして作って、ファイル名を123.htmlとしたのよ。
で、/archives/ってディレクトリを作ってアップロードしても、アクセスすることが出来るのはhttp://example.com/archives/123.htmlという拡張子付きURLでなければならないの・・・
これだと検索エンジンのクローラも迷子になるだろうし、なによりも閲覧者さんが来訪出来なくなる可能性もある。
それでは困るんだよ・・・
そこで、archives/123でもarchives/123.htmlでも、どちらでも該当ページにアクセスできるようにしたかったワケ。
本来なら301リダイレクトを施して【archives/123】にアクセスがあれば【archives/123.html】にリダイレクトするのがベストなのかもしれませんが、ウマイ方法が思い浮かばなかったのよね。
ページの数だけ301リダイレクトを記述すればよかったのかもしれませんが、ページ数が多いのでヤメたの。
例えば、100記事あったとすれば下のように・・・
Redirect 301 http://example.com/archives/1 example.com/archives/1.html Redirect 301 http://example.com/archives/2 example.com/archives/2.html Redirect 301 http://example.com/archives/3 example.com/archives/3.html Redirect 301 http://example.com/archives/4 example.com/archives/4.html ・ ・ ・ ・ Redirect 301 http://example.com/archives/99 example.com/archives/99.html Redirect 301 http://example.com/archives/100 example.com/archives/100.html
こんな感じで100行書けばいいのかもしれないけど、ちょっと・・・ね?
ワイルドカードを使えるのならいいんだけど、大量の記事に対して.htaccessファイルに大量の記述をするのはちょっと不細工すぎますよね。
欲しい情報に限ってすぐに見つからないもの
今回の冒頭で紹介した「拡張子あり」でも「拡張子なし」でも、どちらでもアクセスできるようにする方法って、なかなか情報が得られなかったんですよね。
リダイレクト関連で「WWWあり/なし」とか「PHPを拡張子.htmlで動かす」とか、あとはサイトのドメインが変わる際の個別ページのリダイレクトなどは沢山情報があるんですけどね・・・
あたしゃ同一ドメインのままで、「拡張子なし」から「拡張子あり」へリダイレクトしたかったのよ。
拡張子の有無って需要無いのかな?
いいよね?
最後まで私の拙いエントリーを読んでいただいてありがとうございます!もしもこの記事が少しでもあなたのお役に立てたなら、ぜひ「いいね!」していってください。
また何か新しい発見をお届けできるかもしれません。
何か見つかるかもね
コメント
※コメントは承認制ですので、表示されるまで時間がかかる場合があります。この記事へのトラックバックはありません。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} /[^./]+$
RewriteRule ^(.*)$ $1.html [R=301,L]
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} /[^./]+$
RewriteRule ^(.*)$ $1.html [R=301,L]