WEBブラウザでlocal上のphpファイルにアクセスする時、拡張子のないURLにしたいのです。
たとえば"http://localhost/test.php?X=1"であるべきURLを"http://localhost/test?X=1"で表示するようにしたいのです。
この時の定石である.httaccessファイルに次の記述をしてもうまくいかなかったので質問いたしました。
"AddType application/x-httpd-php .php .html"←実際には改行を入れてあります。
環境は、Mac OS X(10.6.1)インストールしたXAMPP(1.7.2a)上のapacheです。
ご存じの方、よろしくご教授をお願いいたします。
【1】ファイルの拡張子
(1).php
xamppのデフォルト設定で拡張子phpは使えるようになっているので不要。
(2).html
拡張子htmlのファイルもphpとして認識させたいのであれば下記だけが必要。
AddType application/x-httpd-php .html
【2】拡張子無しのアドレスの取り扱い
(1)パターンに当てはまれば転送する方法例 - Rewrite
RewriteEngine on RewriteRule ^([a-zA-Z0-9]+)$ $1.php [QSA,L]
(2)拡張子がなければ強引にphpに結びつける方法例 - コンテントネゴシエーション
Options MultiViews AddType text/html .php
応用の広さから(1)を覚えておくと利用範囲が広がっていいと思うし、
レンタルサーバで使える場合も多いので(1)のみの回答ばかりしてきたのだけど、
公開サーバではなく個人的に使うサーバなら(2)が楽かな・・・。
拡張子を設定しても、ご希望の動作にはなりません。
http://localhost/testは、htmlファイルではななく、
testというディレクトリに対するアクセスとみなされますから。
ご希望の動作にするには、URLの書き換えが必要です。
http://webtech.akijapan.com/htaccess/rewrite.phtml
などを参考にしていただいて、mod_rewriteを有効にした上で、
.htaccessに以下のように記載すればよいかと。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^test /test.php?%{QUERY_STRING} [L]
</IfModule>
【解説】
http://localhost/testにきたアクセスを、
getのパラメータをそのまま引き継いで
http://localhost/test.phpに移します。
つまり、以下左側のURLへアクセスすると、実際は、右側へのアクセスとみなされます。
http://localhost/test => http://localhost/test.php
http://localhost/test?X=1 => http://localhost/test.php?X=1
http://localhost/test?abc=1&def=2 => http://localhost/test.php?abc=1&def=2
になります。(URLはリダイレクトされません。)
動作の確認をしたければ、.htaccessの[L]の部分を[L,R]に書き換えれば
リダイレクトされますので、URLを見れば、どのように書き換えられたか
わかります。
ご参考になれば。
丁寧な解説ありがとうございます。
教えていただいたソースを.httaccessに書いてみたのですが状況はかわりせんでした。
別回答者kn1967さんの回答は機能したので、"mod_rewrite"は動作しているはずなのですが。
とりあえず問題は解決されたので、締め切りといたします m(_ _)m
【1】ファイルの拡張子
(1).php
xamppのデフォルト設定で拡張子phpは使えるようになっているので不要。
(2).html
拡張子htmlのファイルもphpとして認識させたいのであれば下記だけが必要。
AddType application/x-httpd-php .html
【2】拡張子無しのアドレスの取り扱い
(1)パターンに当てはまれば転送する方法例 - Rewrite
RewriteEngine on RewriteRule ^([a-zA-Z0-9]+)$ $1.php [QSA,L]
(2)拡張子がなければ強引にphpに結びつける方法例 - コンテントネゴシエーション
Options MultiViews AddType text/html .php
応用の広さから(1)を覚えておくと利用範囲が広がっていいと思うし、
レンタルサーバで使える場合も多いので(1)のみの回答ばかりしてきたのだけど、
公開サーバではなく個人的に使うサーバなら(2)が楽かな・・・。
見やすい解説ありがとうございます。
【2】の(1)の記述で、希望通りの動作をいたしました!
ちなみに
【2】の(2)の方法だとファイルは見つけたのですが、txtファイルとしてソースをそのまま表示するような状態が発生しました。
見やすい解説ありがとうございます。
【2】の(1)の記述で、希望通りの動作をいたしました!
ちなみに
【2】の(2)の方法だとファイルは見つけたのですが、txtファイルとしてソースをそのまま表示するような状態が発生しました。