ネットが遅くてイライラしてない!?

Apache + PHPのサイトで、PHPファイルの拡張子を
表示させない設定について質問です。

例えば、list.php や news.php にアクセスする
時に

 http://xxx.com/list?year=2004
 http://xxx.com/news?no=15

のように使えるようにしたいと考えています。


いくつか調べてみたのですが、どうやら、
.htaccess ファイル内に

 Options +MultiViews

を書き込んだりするらしい、というところまでは
なんとか分かったのですが、具体的な設定記述を
書いている情報にたどりつけませんでした。

どなたかご存知の方がいましたら、教えていただ
けませんでしょうか?
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

興味を持って調べた矢先、Googleで「.htaccess」「拡張子無し」でズバリの回答が一発でヒットしました^^;)。


実験していないのでどのバージョンでもうまくいくのかは不明です。

参考URL:http://iwamode.com/etc/urawaza.html

この回答への補足

情報ありがとうございます。
参考URL確認させていただきました。

とりあえず、拡張子を見せない、という目的は達成
できそうですが、この方法で拡張子を見せなくする
ためには、既存のPHPファイルの拡張子をすべて変更
する必要があり、更にはPHPファイル内のURLまで変更
しなければなりません。大量です(涙)。

さらに、対外的にリンクしてもらっていたPHPファイル
へのリンクが切れてしまいます。

できれば、PHP拡張子付きのままで隠す方法があり
ませんでしょうか?

補足日時:2004/09/07 23:59
    • good
    • 0
この回答へのお礼

yatokesaさん、ありがとうございました。

今回、イメージしていたものとぴったりくるものは出来ないようですが、yatokesaさんから教えていただいた方法が、一番それに近いことを実現できそうです。

また機会がありましたらよろしくお願いします。

お礼日時:2004/09/21 22:37

>できれば、PHP拡張子付きのままで隠す方法がありませんでしょうか?



AliasMatchを使えば可能です。
(ただし、以下の例の場合、画像ファイル等もphpと見なします。)

AliasMatch "/path/to/php/(.+)" "/path/to/php/$1.php"

参考URL:http://httpd.apache.org/docs-2.0/ja/mod/mod_alia …
    • good
    • 0
この回答へのお礼

ありがとうございます。

AliasMatch ですね。参考URLを読んでみたのですが、まだ理解できていないので、他の情報とあわせて調べて見ます。

お礼日時:2004/09/21 22:34

>できれば、PHP拡張子付きのままで隠す方法がありませんでしょうか?


apache側で拡張子を補完してということですよね。これはちょっと無理だと思います、私の知る限り...。

ErrorDocument 404 /redirect.php
の様に、例えば http://xxx.com/news?no=15 という存在しないファイルへのアクセスを redirect.phpというプログラムで受けて news.phpへ QUERY_STRINGSと共に渡すことはできるかもしれません。

前後しますが、
>更にはPHPファイル内のURLまで変更しなければなりません。大量です(涙)。
これは sedなどで一括置換で、
>対外的にリンクしてもらっていたPHPファイルへのリンクが切れてしまいます。
に関しても先の error documentの機能を使ってリダイレクトでという事も可能かと思います。
    • good
    • 0

.htaccessを使う方法ではないですが…



Apacheの設定ファイル httpd.conf の
AddTypeの記述でPHPを実行可能にしている部分ですが

AddType application/x-httpd-php .php

こんな感じにしていますか?

これを例えば以下のように

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

と書いておくと、PHPのファイルを *.htmlや*.htm などの拡張子で保存しておいてもPHPが実行されるはずです。

こうしておけば、URLにも.phpとしなくてもOKじゃないでしょうか?

この回答への補足

情報ありがとうございます。
先日、その方法も見つけました。しかし、その方法
だと、

 http://xxx.com/list.html?year=2004
 http://xxx.com/news.html?no=15

となり、HTML拡張子が付いてしまうんですよね。
今回やりたいのは、拡張子PHPをHTMLへ偽装(?)
ではなく、拡張子全般の隠蔽、といったところで
しょうか。

補足日時:2004/09/07 01:35
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

私がさがしていた方法とは違いましたが、chuparkさんから教えていただいた方法が、正攻法みたいですね。
別の機会に参考にさせていただきます。

お礼日時:2004/09/21 22:39

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q拡張子を隠すのは良い事なのですか?

こんにちは。いつもお世話になります。
最近、ネットサーフィンしていると、下記のように、
http://www.xxxxx.jp/company
拡張子を隠した状態をたまに見かけるようになりました。
また、companyの後に、.html, .htm, .phpなどと入れてみるものの、
全部エラー画面になります。

まず、
1)Webサイトを制作するにあたり、この拡張子を隠すというのは、
良い事なのでしょうか?、それとも悪い事なのでしょうか?

2)拡張子を隠すのは、かっこ良い事ですか?

3)できたら、隠したいのですが、YAHOO!のビジネスエキスプレスでの登録に支障はでませんか?

教えて下さい。お願いします。

Aベストアンサー

>一般的なのですか?
一般的です。
ココのサイトのURLは http://okwave.jp/ ですが、実際には http://okwave.jp/index.php3 が呼び出されています。
Yahooもしかり、http://www.yahoo.co.jp/ にアクセスすると、 http://www.yahoo.co.jp/index.html が呼び出されます。
※質問に書いてあるのは http://www.xxxxx.jp/company/ ですが、同じ原理です。

>でも、どうしたら、こんな事ができるのでしょうか?
Webサーバの設定で可能です。ディレクトリ(/で終わる)にアクセスされたら、その配下のindex.htmlを呼び出すなどの設定ができます。

>また、どうして、このような事をするのでしょうか?
一番の理由は「訪問者がアクセスしやすいように」でしょう。
このような機能がないと、OKWaveにアクセスするには http://okwave.jp/index.php3 のindex.php3の部分を知らなければアクセスできません。しかし、この機能があればhttp://okwave.jp/でアクセスできるので訪問者は覚えるURLが短くて済みます。
他には「ディレクトリにあるファイルの一覧を見せないように」でしょうか、たまに http://xxx.com/abc/ などのURLにアクセスするとabcの下にあるファイルの一覧が表示されてしまうサイトがあります。通常、サイトの管理者はセキュリティなどの理由から一覧を表示させたくありません。しかし、この機能を利用すれば、一覧が表示されることがなく設定したコンテンツが表示されると言うことになります。

>PHPは、本格的なサイトには向いてないのですか?
>Web制作のプロは、PHPを軽視しているというか、PHPって安っぽいのでしょうか?
そんなことはありません。このサイトもPHPですし、他にも多くのサイトがPHPを利用しています。
PHPは高機能かつシンプルな優れた技術です。たぶん、これからも多くのサイトがPHPを採用していくのではないでしょうか?

>一般的なのですか?
一般的です。
ココのサイトのURLは http://okwave.jp/ ですが、実際には http://okwave.jp/index.php3 が呼び出されています。
Yahooもしかり、http://www.yahoo.co.jp/ にアクセスすると、 http://www.yahoo.co.jp/index.html が呼び出されます。
※質問に書いてあるのは http://www.xxxxx.jp/company/ ですが、同じ原理です。

>でも、どうしたら、こんな事ができるのでしょうか?
Webサーバの設定で可能です。ディレクトリ(/で終わる)にアクセスされたら、その配下のindex.htmlを...続きを読む

Qapacheで拡張子を省略してアクセスする記述

Lampp環境にあるサーバ上で
.phpの拡張子なしでアクセスするには
httpd.confのどの部分をどのように記述すればよいでしょうか?
よろしくお願いいたします。

Aベストアンサー

httpd.confで該当スクリプトを置くディレクトリに対し Options MultiViews を設定する。
具体的には以下のような感じ。

<Directory /usr/local/apache/htdocs/hoge/>
        AllowOverride all
        Options MultiViews
    </Directory>


ただ、httpd.confに設定すると実行速度的には少々不利なのだったと記憶します。
.htaccessというファイルを作成してその中に

<FilesMatch "^$">
ForceType application/x-httpd-php
</FilesMatch>

といった記述を加える方が実行速度的には速いのだったような。。。違ったかな?
ちなみに.php以外のファイルは拡張子ありでよいならhttpd.confで

DefaultType application/x-httpd-php

とすればよいだけです。
なお、xxx.phpというファイルをxxxという拡張子無しのファイルへコピーしておくことをお忘れなく。

httpd.confで該当スクリプトを置くディレクトリに対し Options MultiViews を設定する。
具体的には以下のような感じ。

<Directory /usr/local/apache/htdocs/hoge/>
        AllowOverride all
        Options MultiViews
    </Directory>


ただ、httpd.confに設定すると実行速度的には少々不利なのだったと記憶します。
.htaccessというファイルを作成してその中に

<FilesMatch "^$">
ForceType application/x-httpd-php
</FilesMatch>

といった記述を加える方が実行速度的には速いのだったような。。。違...続きを読む

Qhtaccessで拡張子を非表示にしてHTML文書を表示させる方法

htaccessで拡張子を非表示にしてHTML文書などを表示させる方法が分かりません。
具体的に言えば、example.htmlというファイルを
http://www.example.com/example
というURLで表示したいのです。

http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/にて調べてみたのですが、よく分かりませんでした。

よろしくお願いします。

Aベストアンサー

#2です。
mod_rewriteは正規表現を使えるので、

RewriteRule ^([A-Za-z0-9]+)$ $1.html

のように書くことも出来ます(英数字の並びに.htmlを付加する)。

DefaultTypeを使う方式のほうは、

DefaultType text/html
<Files "example2">
DefaultType text/css
</Files>

でどうでしょうか(未確認)。

>今度はhttp://www.example.com/example.htmlは表示されなくなってしまいました。
>両方で表示できるサイトを知っているのですが、
案1: mod_rewriteを使う
案2: 内容が同じ2つのファイルを置く。またはサーバーにログインできればリンクを張るほうが良い。

QURLに「.html」の拡張子がなくても表示される

URLに「.html」の拡張子がなくても表示される。

よろしくお願いします。
例えば、下記のようなURLがあり、(A)の場合でも(B)の場合でもページが表示されてしまいます。
同じレンタルサーバーを利用しているサイトで確認したのですが、
htmlがなければ、表示されていません。従いまして、サーバーの機能ではないと思います。

A)http://www.hoge.co.jp/hoge.html
B)http://www.hoge.co.jp/hoge

※動的なページではなく、HTMLファイルをアップするだけの静的なページです
※hogeページはindexページではありません


最近、下記のような「.htaccess」を作成、アップしたからかと思い、
.htaccessを削除したものの、変化はありませんでした。

---------------------------------------------------
RewriteEngine on
RewriteCond %{HTTP_HOST} ^hoge\.com
RewriteRule ^(.*)$ http://www.hoge.com/$1 [R=301,L]
ErrorDocument 404 /error.html
---------------------------------------------------


通常のように「.html」の拡張子がなければ表示されない
というようにしたく思います。

この件につきましてご教授いただけますと幸いです。

URLに「.html」の拡張子がなくても表示される。

よろしくお願いします。
例えば、下記のようなURLがあり、(A)の場合でも(B)の場合でもページが表示されてしまいます。
同じレンタルサーバーを利用しているサイトで確認したのですが、
htmlがなければ、表示されていません。従いまして、サーバーの機能ではないと思います。

A)http://www.hoge.co.jp/hoge.html
B)http://www.hoge.co.jp/hoge

※動的なページではなく、HTMLファイルをアップするだけの静的なページです
※hogeページはindexページではありま...続きを読む

Aベストアンサー

拡張子云々は忘れて以下の説明を理解してください。
例えば、URLが、次のようなものだったとします。
http://hoge.com/abc/efg/hij
これは、ブラウザでリンクをクリックすると、HTTPプロトコルで、hoge.comで参照されるインターネット上のコンピューターのHTTPサーバーに対して、/abc/efg/hijファイルをくれ!と要求しています。
GET: /abc/efg/hij
という要求ヘッダになります。(Live HTTP Headerの結果を確認する。)
サーバーがすること
/
|-- abc/
   |-- efg/
      |-- hij
 というファイルを探します。(拡張子はこの段階では関係ない)
(それがファイルであった場合)
 そのファイルの種類の設定がサーバーにあるか確認します。
 ・設定がない場合はデフォルトの指定
   --通常はtext/plain と判断して、HTTP応答ヘッダに
   content-type:text/plain をつけてブラウザに返します。
 ・設定がある場合は、それに従います。
  (例えば.ataccessにて、
   AddType application/x-httpd-cgi efg;だったら実行ファイルとして処理します。
    content-type:はそのプログラムが出力する。
   AddType image/jpeg *; だったら、*(ワイルドカード)なので
    そのディレクトリすべてのファイルをjpegと判断してHTTP応答ヘッダに
    content-image/jpeg をつけて送り出します。
(そのhijがディレクトリであった場合)
 ・それを開いてみます。
   ・DIRECTORY INDEXが指定されていれば、そのファイルの有無を調べてそれを提供
   通常はindex.html INDEX.HTM index.php・・とか複数指定することが多い。
   これを順番に探します。
   ・存在すれば、そのファイルの指定↑に従います。
    tex/htmlとか application/x-httpd-cgi とか
  ・DIRECTORY INDEXの指定がない(通常は指定されているが)、あるいはDIRECTORY INDEX
   に指定がない場合は
★/hojは、PATH_INFOという環境変数に格納して、/efg について、上と全く同じ処理を行ないます。
  (上の/hijを/efgに置き換えて読む)よって省略
★/efgもない場合はそれもPATH_INFOに追加します。PATH_INFOの値は /efg/hij になる。
★ 最後に/ルートについて同様な処理をします。

 それでもない場合は、
  ・404 NOT foundを返すか、
  ・PATH_INFに存在するディレクトリのファイル一覧を返す
  かの指定に従います。
   以前はディレクトリ一覧を表示することが多かったのですが、
   最近の素人さんが利用するサーバーはNOT FOUNDを返します。
     301などを返すよう指示もできます。

 お馬鹿なコンピューターですから、この一見複雑だが単純な機械的処理をしています。

>htmlがなければ、表示されていません。従いまして、サーバーの機能ではないと思います。
> A)http://www.hoge.co.jp/hoge.html
> B)http://www.hoge.co.jp/hoge 
 それは、
  ・/hogeディレクトリにDIRECTORY_INDEXで指示されたファイルがないか
  ・/hogeファイルがないか
  ・/hogeがCGIであって、エラーを返しているか
  ・/にある「DIRECTORY INDEXに指定して指定されているファイルがない」
  その他の理由も考えられる。

>なるほど、ヘッダー情報を読み取って、
>サーバーで表示処理をしているのですね。ご指摘ありがとうございます。
 ヘッダ情報に何を書くかはサーバーの設定ですが、ヘッダー情報を元にブラウザが決めています。

>サーバーに電話で問い合わせたところ、
>そのような機能はなく、設定もしていないと回答を受けたことと、
 サーバーのデフォルトの指定のままだという事です。

>同じレンタルサーバを利用しているサイトで調べると、.html をURLから外せば404が出、
>さらにそのサーバー会社のURLから.htmlを外しても、404が出ています。
 これは、
  ・.htmlを外した同名(hoge名の)ディレクトリが存在し
  ・その中にDIRECTORY_INDEXで指定されたファイルがない
  ・その場合に404を返す指定になっている
 と言う事です。

>http://www.hoge.com/test.html
>http://www.hoge.com/test/00002.html ←00002.htmlを削除すると、上記URLが表示される
 DIRECTORY_INDEXにtest.htmlが指定してある以外、通常のデフォルト指定なのです。
 /test ディレクトリが存在している場合は通常はNOT FOUND 401を返すはずですが・

拡張子云々は忘れて以下の説明を理解してください。
例えば、URLが、次のようなものだったとします。
http://hoge.com/abc/efg/hij
これは、ブラウザでリンクをクリックすると、HTTPプロトコルで、hoge.comで参照されるインターネット上のコンピューターのHTTPサーバーに対して、/abc/efg/hijファイルをくれ!と要求しています。
GET: /abc/efg/hij
という要求ヘッダになります。(Live HTTP Headerの結果を確認する。)
サーバーがすること
/
|-- abc/
   |-- efg/
      |-- hij
 というファイルを探...続きを読む


人気Q&Aランキング