XAMPPで動作しているApacheについて教えてください。

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人2回まで
  • 登録:
  • 終了:2009/09/21 10:03:43
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kn1967 No.2

回答回数2915ベストアンサー獲得回数301

ポイント55pt

【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)が楽かな・・・。

id:kka

見やすい解説ありがとうございます。

【2】の(1)の記述で、希望通りの動作をいたしました!

ちなみに

【2】の(2)の方法だとファイルは見つけたのですが、txtファイルとしてソースをそのまま表示するような状態が発生しました。

2009/09/21 10:00:39

その他の回答1件)

id:easygoings No.1

回答回数153ベストアンサー獲得回数20

ポイント15pt

拡張子を設定しても、ご希望の動作にはなりません。

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を見れば、どのように書き換えられたか

わかります。

 

ご参考になれば。

id:kka

丁寧な解説ありがとうございます。

教えていただいたソースを.httaccessに書いてみたのですが状況はかわりせんでした。

別回答者kn1967さんの回答は機能したので、"mod_rewrite"は動作しているはずなのですが。

とりあえず問題は解決されたので、締め切りといたします m(_ _)m

2009/09/21 10:02:53
id:kn1967 No.2

回答回数2915ベストアンサー獲得回数301ここでベストアンサー

ポイント55pt

【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)が楽かな・・・。

id:kka

見やすい解説ありがとうございます。

【2】の(1)の記述で、希望通りの動作をいたしました!

ちなみに

【2】の(2)の方法だとファイルは見つけたのですが、txtファイルとしてソースをそのまま表示するような状態が発生しました。

2009/09/21 10:00:39
  • id:chrono1742
    kka様
    kn1967様が回答されている【2】(2)の "AddType text/html .php" は間違いです。やってはいけません。
    PHPスクリプトをテキストファイルとして扱えという指示になりますから、PHPソースが丸見えになってしまいます。セキュリティ上、たいへん危険なことです。
  • id:rouge_2008
    > chrono1742さん

    横からですが失礼します。
    環境によってはソースが表示されることもあるかもしれませんね。
    こちら(Apache2.2+PHP5.2)では大丈夫でしたが・・・

    http://www.mtamaki.com/trac/mtamaki/wiki/ApacheTips
    http://jp.php.net/manual/ja/faq.installation.php#faq.installation.apache.multiviews
    ※バージョンに合わせて以下のように記述すると良いようです。(一部引用)

    # PHP 4
    Options +MultiViews
    AddHandler php-script php
    AddType text/html php

    # PHP 5
    Options +MultiViews
    AddHandler php5-script php
    AddType text/html php

    ※ただし、この記述もApache1ではエラーになるようです。(上記参照URLに記述してあります。)


    ここ最近、kn1967さんの回答やコメントへの意見が多いようですが、間違いの指摘でしたら、間違っている箇所の訂正をご自分がコメントすれば済むはずです。
    kn1967さんに関する質問を3回もしていますが、これ以上同じような行動を繰り返した場合、嫌がらせととられる場合もあるのでご注意ください。
    現時点でも、少なくとも私にはchrono1742さんが意図的にkn1967さんにからんでいるように見えます。
  • id:rouge_2008
    > kkaさん

    拡張子「.php」がついた状態で問題なく実行されているのでしたら、【2】の(2)の方法は以下でも大丈夫だと思います。
    ※ボットからアクセスがあった場合の動作は分かりません。m(__)m

    Options +MultiViews
    MultiViewsMatch Handlers

    ※サーバーにアップする場合は、必ず事前に動作を確認して、使用しているサーバーに合わせた記述に変更してください。
    (ローカルでは問題なく実行されても、サーバーでは問題が発生する場合があるかもしれません。)

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません