拡張子のないURLでページにアクセスさせる.htaccessのTips

ブログ技術

需要があるかどうかわかりませんが、個人的にちょっと困ったことがあって調べものをしまして、ウェブ上のファイルに拡張子のないURLでアクセスする方法を知ったので備忘録残しておきます。

.htaccessでのMIMEタイプの指定

私の利用しているウェブクロウプラスというレンタルサーバーでは.htaccessでMIMEタイプが指定できません。MIMEタイプというのはざっくり言うと「拡張子とファイルの種類の関連付け」のようなものです。

通常apacheサーバーでは.htaccessというファイルに必要なMIMEタイプの指定を記述します。良くある例ではphpのファイルに拡張子「.html」をつけて動作させたりとか(あるいはHTMLファイルの中に部分的にphpスクリプトを埋め込んだり)。

そういった場合.htaccessには


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

または


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

という記述をすることによって拡張子が「.php」「.html」「.htm」のいずれの場合でも(ファイルの中にphpスクリプトが存在すれば)それをphpとして処理/実行することが出来るようになります。

拡張子なんてこだわるほどのものではないじゃないか、なんでも良いじゃないかと思う向きもあるかもしれませんが、拡張子でファイルの種別(というか処理方法)を特定されない(CGIなのかphpなのか単なるjsなのか)ことによって(無論完全ではないが)よりクラックされにくいウェブアプリや動的なページになります。

なにより同じ処理をするのにphpであったものをCGIに置き換えるなど、システムリニューアルによってURLの拡張子部分が変わってしまうとユーザーのアクセシビリティにも関わる(ブックマークしてたけどURL(拡張子)変わったことに気付かずアクセスできなくなるなど)こともあります。

拡張子が指定できないならいっそのことなしで

というわけでウェブクロウプラスではMIMEタイプが指定できず、私が以前作った

形鋼・鋼管 断面性能検索サービス | 56doc.net

このページもアクセスすればわかりますが拡張子phpのままです。

こういったことを回避するためにどうしたら良いだろう…と思っていろいろ調べてみたら、拡張子なしでファイルにアクセスさせる方法もあるということで

拡張子なしでアクセスするための.htaccess : 備忘録

こんな記事を見つけました。「リクエストのあったURLに.htaccessで拡張子をつけてしまおう=ユーザーからは拡張子なしでアクセスできる」というような方法です。具体的に例を挙げたほうがわかりやすいでしょう。

今「https://bfile.56doc.net/phpsample/」というディレクトリに「noextension.php」というファイルを用意しました。同じフォルダの.htaccessには


RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php

このような設定を記述しておきます。そうすると

php echo関数出力サンプル
php echo関数出力サンプル
php echo関数出力サンプル
php echo関数出力サンプル

いずれのURLでも同じファイルに到達することが出来るようになります。ブラウザのURL欄にはそれぞれ拡張子有り/無しで表示されると思いますがこれは同一のファイルを見ています。

もちろん実際のアプリやページに適用する場合に公開するのは拡張子の「ない」ほうです。

サンプルに挙げた「noextension.php」のソースは


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-language" content="ja">
<meta name="author" content="gorodoku">
<meta name="copyright" content="Copyright gorodoku">
<meta name="description" content="php echo関数出力サンプル">
<meta name="keywords" content="php,echo">
<title>php echo関数出力サンプル</title>
</head>
<body>
   <?php
echo "このテキストはphpのecho関数で出力しています。";
?>
</body>
</html>

このようになっており「このテキストはphpのecho関数で出力しています。」というテキストは実際にphpのecho関数で出力しています。

まとめ

MIMEタイプが制御できる場合はこんなことはしなくてもいいのですけど、サーバーの仕様に制限がある場合にはこんな方法も有るよ、ということで紹介しました。もっとも.htaccess自体変更できない場合にはどうしようもないですが。

今回の例ではphpファイルでしたが通常のHTMLファイルでもその他のファイルでも同じ方法で拡張子なしでアクセスすることができるようになります。利用頻度は高くなさそうですがTipsとしてどこかでお役に立てば。

んじゃまた。

コメント

タイトルとURLをコピーしました