プロが教える店舗&オフィスのセキュリティ対策術

path_infoで動的ページの静的処理をしようとしています
path_infoをつかって
xxx.php?id=123

xxx.php/123

xxx.php/123.html
などの入力で動くようにはできたのですが、.phpをはずすべく
.htaccess内の設定でうまくいきません。

ネットで出てきた方法として2つ見つかったのですが、

<FilesMatch "^xxx$">
ForceType application/x-httpd-php
</FilesMatch>
とするとファイルが見つかりませんになります

<FilesMatch "^xxx$">
AddType application/x-httpd-php
</FilesMatch>
とするとInternal Server Error(500 error)になります

これは何が悪いのでしょうか。
どこをどうすれば拡張子なしで認識するようになるのでしょうか。

.htaccessの使用はサーバーで認められていて、以前からDirectoryIndexやErrorDocumentの設定をして使用しています
PHPは4と5の両方で試しましたが、どちらでも同じ結果でした

どうかお分かりの方ご教授ください。
よろしくお願いします。

A 回答 (4件)

apache2.0では正規表現の扱いが違うようです。

そこで本家で確認、
http://httpd.apache.org/docs/2.0/ja/sections.html
<FilesMatch>のセクションをみると"ダブルコーテーションを使ってません。
そこでこれを試してください、
<FilesMatch \.php$>
ForceType application/x-httpd-php
</FilesMatch>
この設定を.htaccessの最後に追加する際、最終行の改行をお忘れなく、
それをわすれると同じく500 error Internal Server Errorとなります。
<FilesMatch>を記述しない限りphpは正常に動いてるんでですよね?
それだとMIMEタイプメディアの件は関係ないと思います。

この回答への補足

ありがとうございます。
本来ならお礼の欄に書くべきところでしょうが、字数制限があるのでこちらでお許しください


早速教えて頂いたページのFilesMatchの欄も読みました
http://httpd.apache.org/docs/2.0/ja/mod/core.htm …
例題のところでは"(ダブルクォーテーション)はあるのですが・・・


それはさておき、早速結果報告です

<FilesMatch>を記述してもしなくても基本的にphpは正常に稼働しています

"(ダブルクォーテーション)を付けても付けなくても動作は同じでした

<FilesMatch ^test$>
AddType application/x-httpd-php
</FilesMatch>
<FilesMatch \.php$>
ForceType application/x-httpd-php
</FilesMatch>
とするとphpだけでなく、htmlファイルなどを表示させようとしても500 error Internal Server Errorがでます。

AddType application/x-httpd-php
を記述すると同一ディレクトリ内全てのファイル(試したのはphp,html,gif)が500 error Internarl Server Errorとなるようで、下層ディレクトリ内のgifファイルは正しく表示されたもののphpファイルは500 error Internal Server Errorでした
が、サーバー会社曰くAddTypeは使用可能とのことです

AddType application/x-httpd-php .php
と後ろを追加して試したのですが、この場合404 errorになりました

<FilesMatch ^test$>
ForceType application/x-httpd-php
</FilesMatch>
<FilesMatch \.php$>
ForceType application/x-httpd-php
</FilesMatch>
上のようにForceTypeに書き換えてみたら404 errorになりました


testをtest.phpにして表示させたら表示するのでphp側のミスはないと思います
これ以外で考えられるのが.htaccessの記述ミスなどですが、改行や記述位置などに問題があるのでしょうか。


AddHandler php5-script .php
DirectoryIndex index.php index.cgi index.shtml index.html index.htm index.hdml .ht
ErrorDocument 404 /404.html
<FilesMatch ^test$>
AddType application/x-httpd-php .php
</FilesMatch>
<FilesMatch \.php$>
ForceType application/x-httpd-php
</FilesMatch>

としています。
最初のAddHandler php5-script .phpはphpをバージョン5で動かすための記述で、これを抜けばバージョン4になります
これを付けた場合と付けていない場合の両方を試したのですが、結果はどちらも同じです
この記述の中にどこか問題でもあるのでしょうか

補足日時:2009/12/28 10:29
    • good
    • 0

<FilesMatch "^$">を使った場合動きましたか?


お答えください。

下記の要領でテストしてみてください。
phpファイル名はtest.phpとする。
このファイルに拡張子なしのtestとしてアクセスするためには、
1 test.phpをtestにrenameまたはcopyしておく。
2 <FilesMatch "^test$">
AddType application/x-httpd-php
</FilesMatch>
しらべた結果これで動くはずです、但しApache 1.3.31 =< の場合、
このバージョン情報は不正確なのでとりあえず1.3xxなら、
2でだめだった場合<FilesMatch ~ "^test$">として試してみてください。
~と"^test$"の間にスペース。
動かない場合、エラーはそのままペーストしてください。

この回答への補足

お礼の字数制限にかかったのでこちらで続きです。


ちなみに今レンタルサーバーのサポートページを見ていましたら
MIMEタイプメディア一覧が載っていました
application/andrew-inset .ez
application/mac-compactpro .cpt
application/msword .doc
application/octet-stream .bin .dms .lha .lzi .exe .class
application/oda .oda
application/pdf .pdf
application/postscript .ai .eps .ps
application/rtf .rtf
application/smil .smi .smil
application/vnd.mif .mif
application/vnd.ms-powerpoint .ppt
application/x-bcpio .bcpio
application/x-cdlink .vcd
application/x-chess-pgn .pgn
application/x-cpio .cpio
application/x-csh .csh
application/x-director .dcr .dir .dxr
application/x-dvi .dvi
application/x-futuresplash .spl
application/x-gtar .gtar
application/x-hdf .hdf
application/x-javascript .js
application/x-koan .skp .skd .skt .skm
application/x-latex .latex
application/x-netcdf .nc .cdf
application/x-sh .sh
application/x-shar .shar
application/x-shockwave-flash .swf
application/x-stuffit .sit
application/x-sv4cpio .sv4cpio
application/x-sv4crc .sv4crc
application/x-tar .tar
application/x-tcl .tcl
application/x-tex .tex
application/x-texinfo .texinfo .texi
application/x-troff .t .tr .roff
application/x-troff-man .man
application/x-troff-me .me
application/x-troff-ms .ms
application/x-ustar .ustar
application/x-wais-source .src
application/zip .zip
audio/basic .au .snd
audio/midi .mid .midi .kar
audio/mpeg .mpga .mp2 .mp3
audio/x-aiff .aif .aiff .aifc
audio/x-pn-realaudio .ram .rm
audio/x-pn-realaudio-plugin .rpm
audio/x-realaudio .ra
audio/x-wav .wav
chemical/x-pdb .pdb .xyz
image/bmp .bmp
image/gif .gif
image/ief .ief
image/tiff .tiff .tif
image/x-cmu-raster .ras
image/x-portable-anymap .pnm
image/x-portable-bitmap .pbm
image/x-portable-graymap .pgm
image/x-portable-pixmap .ppm
image/x-rgb .rgb
image/x-xbitmap .xbm
image/x-xpixmap .xpm
image/x-xwindowdump .xwd
model/iges .igs .iges
model/mesh .msh .mesh .silo
model/vrml .wrl .vrml
text/css .css
text/plain .asc .txt
text/richtext .rtx
text/rtf .rtf
text/sgml .sgml .sgm
text/tab-separated-values .tsv
text/x-setext .etx
text/xml .xml
video/mpeg .mpeg .mpg .mpe
video/quicktime .qt .mov
video/x-msvideo .avi
video/x-sgi-movie .movie
x-conference/x-cooltalk .sice

今回のapplication/x-httpd-phpが見あたらないのですが、このサーバーでは利用不可ってことなのでしょうか
.htmlとか.htm、.phpなどどれも載ってませんが

補足日時:2009/12/27 17:05
    • good
    • 0
この回答へのお礼

何度もおつきあいありがとうございます。

<FilesMatch "^$">は前回ご教授頂いた際に試しましたが動きませんでした
500 error Internal Server Error
でした

次に今回ご教授頂いたtestで試す方法ですが、~を入れる形も入れない形もどちらも
500 error Internal Server Error
とでました
これの応用版でAddTypeではなくForceTypeも試しましたが
<FilesMatch "^test$">
ForceType application/x-httpd-php
</FilesMatch>
の形でファイルが見つからない404Error、~を入れる形では500 error Internal Serve Errorとなりました

テスト環境はphpはバージョン5、ApacheはApache 2.0.xxです。

お礼日時:2009/12/27 17:04

リンクからの請負で何も考えてませんでした。

ご指摘の通りリンクの設定ではすべての
ファイルに適応されそうですね。それでその設定で動きましたか?

改めて<FilesMatch>をググって見ますと
<FilesMatch 正規表現>
</FilesMatch>
となっているわけですから、
ファイル名がtest.phpで拡張子で判別するなら
<FilesMatch "\.php$">
ForceType application/x-httpd-php
</FilesMatch>
ファイル名のtestで判別するなら
<FilesMatch "^test">
ForceType application/x-httpd-php
</FilesMatch>
注意:この場合testhogeというファイルがあればそれもマッチすると思う。
でうまくいきませんか?
正規表では"^"始まり"$"は終わりを意味するわけですから、試されたように"^test$"と
するとそんなファイルがないということになったと思います。
では純粋にtestだけにマッチさせたい場合というと^test$が使えないわけですから、
"^test\.php$"とするしかないんですかね?そのへんはどう実装してるのかわかりません。
今回の設定は確認しているわけではありません、あしからず。
    • good
    • 0
この回答へのお礼

度重なる回答ありがとうございます。
とりあえず稼働中のものとは別で、テスト用ディレクトリを作って実行してみたのですが、認識しませんでした
どうやらfilesmatch自体が認識されていないようです

単なる記述ミスを避けるため、ご記入頂いたものをコピペしても試しましたが動きません
.htaccessは既にDirectoryIndexやErrorDocumentで動かしているので、ファイル名の記述ミスや置く場所の間違いなどはないと思います

サーバー会社にForceTypeやAddTypeなどは使えるか念のため確認もしてみましたが、使えるとのことです。

.htaccessの最初に持って行ったり、最後に持って行ったり場所も動かしてみましたが、やはり動きません

この場合何が悪いのでしょうか。
記述が問題ないとすると私の知識では見当もつかないので可能性がある場所だけでも教えて頂けないでしょうか。

お礼日時:2009/12/26 17:06

<FilesMatch "^$">


ForceType application/x-httpd-php
</FilesMatch>

で動くようです。つまり"xxx"を除く。

参考URL:http://kawama.jp/archives/2005/09/php_1.html
    • good
    • 0
この回答へのお礼

ありがとうございます。
1つ疑問なのですが、filematchに ~$とすると全部のファイルにphpファイルの適用が施されてしまう気がするのですが、問題ないのですか?
下層ディレクトリも入れるとphp以外にもhtmlやcgi,gif,jpg,plなどなどかなりいろんな種類のファイルがあるのですが

お礼日時:2009/12/26 11:38

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