共用サーバーを利用している為、Apacheを触ることが出来ない為、.htaccessファイルに以下のように記述し設定をしています。

<Files *.php>
ForceType application/x-httpd-php
</Files>

この設定では、「index」「index.php」どちらもアクセスするとPHPが動作してしまいます。
「index」は動作させて「index.php」は動作させないようにすることは可能でしょうか?

もし可能であれば、方法を教えていただけないでしょうか?
ちなみに、php.iniは触ることができます。

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

A 回答 (6件)

何度か試行錯誤しました。


結論としては、DefaultTypeを変更するのが簡単かつスマートだと思います。

* コンテントネゴシエーション(Options +Multiviews)で拡張子無しのファイルをphpスクリプトとして実行させる
foo.php がないと動作せず、foo.php でも foo でもアクセスできてしまいます。
RewriteCond(%{REQUEST_URI})で拒否する手は有りそうですが、ちょっと面倒ですね。

----- .htaccessの記述 -----
Options +Multiviews
DirectoryIndex index
MultiviewsMatch Handlers
---------------------------

Multiviewsのススメ
http://blog.fuktommy.com/1216313223

* DefaultTypeを変更して、拡張子無しのファイルをphpスクリプトとして実行させる
foo.php を foo にリネームして期待通りの結果を得られました。

----- .htaccessの記述 -----
DefaultType application/x-httpd-php
---------------------------
    • good
    • 0
この回答へのお礼

大変参考になりました。ありがとうございました。

お礼日時:2009/05/24 15:38

#2,4,5 です。


今更ですが、気になったことが。

> http://www.***.com/index?aaa=1&bbb=2​ ←動作する
> にするとPHPで書かれてることが分からないようになるかなと思いまして・・・
クエリを投げているので、動的処理が行われていることはわかります。
質問自体を覆すようですが、「PHPで書かれてることが分からないようにする」目的は何なのでしょうか?

目的がSEO対策だとしたら、mod_rewriteでクエリ自体をURLに埋め込むのが一般的かな、と思います。
    • good
    • 0

#2です。



> PHPで書かれてることが分からないようになるかなと思いまして・・・
#1さんの紹介されている mod_rewrite ではダメな理由が何かあるのでしょうか?

Google検索: php 拡張子 mod_rewrite
http://www.google.co.jp/search?q=php+%E6%8B%A1%E …

mod_rewriteは .htaccess で指定できるので、質問者さんの環境で実現可能だと思います。
    • good
    • 0

.htaccess でしたいなら これでいいんじゃないの?



RewriteEngine on
#ファイル又はディレクトリがある場合は無効にする
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#○○○.jp/hogehoge で動かす場合
RewriteBase /hogehoge
#来るものはindexに飛ばす
RewriteRule !.(js|ico|gif|jpg|png|css)$ index.php
    • good
    • 0
この回答へのお礼

大変参考になりました。ありがとうございます。

お礼日時:2009/05/24 15:39

希望する動作が今ひとつ掴めませんが、



http://www.***.com/index



http://www.***.com/index/

と等価なので、/index/index.php にファイルを置けばいいのでは…。
/index.php にファイルを置かなければ、404 NotFound になります。

この回答への補足

例えば

http://www.***.com/index?aaa=1&bbb=2 ←動作する

http://www.***.com/index.php?aaa=1&bbb=2 ←動作しない

にするとPHPで書かれてることが分からないようになるかなと思いまして・・・

補足日時:2009/05/23 16:41
    • good
    • 0

>> 「index.php」は動作させないようにすることは可能でしょうか?



いろいろな方法が考えられますが、
案1.不要なファイル(今回はindex.php)を削除する。もっとも確実でサーバーにも負荷にならない方法です。

案2..htaxxessで制限する
<Files ~ "\.php$">
deny from all
</Files>

案3.rewriteでエラーページに誘導する

など

この回答への補足

mpxさん、説明不足ですみませんでした。
index.phpにはphpプログラムを記述しています。

ブラウザのアドレスで
http://www.***.com/index にアクセスでPHPを動作させる。
http://www.***.com/index.php にアクセスはページが無いみたいに

出来ないのかなぁと思いまして・・・

補足日時:2009/05/23 16:15
    • good
    • 0
この回答へのお礼

大変参考になりました。ありがとうございます。

お礼日時:2009/05/24 15:39

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

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

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

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

Qファイル名を変更すると拡張子を一々聞かれる

 WINMeを使っています。
 ファイル名を変更すると、「拡張子を変更するとファイルが使えなくなります」と聞いてきます。
 ファイル名の後に拡張子を入れれば問題はないのですが、右クリックして名前を変更すると、拡張子ごと青くなるので、ファイル名変更してそのままEnterをキーを押したいです。わざわざその後、半角で拡張子まで入れるのが非常に面倒です。
 拡張子が表示されないようにする方法はありますか?

Aベストアンサー

WIN2000なので細かい場所が違うかもしれませんが

エクスプローラーを開いて
【ツール】の【フォルダオプション】の中の
【表示】の中の【登録されているファイル拡張子は表示しない】
にチェックを入れればほぼご希望の操作ができると思いますが。

Qphp4、php5によるimplode()、file()の動作の違い?

お世話になります。
SJISのファイルで、
//----コメント
//あああ
//---------------
あああ,いいいいいいいいいいいいい
ううううう,えええええええええええええ

のようなファイルを作成して
$csv へこSJISファイルのファイルパスを設定し、
$FielList = mb_convert_encoding(@implode('', @file($csv,FILE_SKIP_EMPTY_LINES)), "UTF-8", "SJIS");
$RowData = split("\r\n",$FielList);
foreach($RowData as $Value) {
$FName=trim($FName);$Cmnt=trim($Cmnt);
echo '$FName='.$FName.'<br> $Cmnt='.$Cmnt.'<br>';
}
と、その内容を見ると
php5では、
$FName=//あああ
$FName=//---------------
$FName=あああ
$Cmnt=いいいいいいいいいいいいい
$FName=ううううう
$Cmnt=えええええええええええええ
と、想定の結果が得られます。
しかし、php4だと、
$FName=//あああ//---------------
となってしまい、どうもcsvファイルの内容が\r\nにより仕切られて配列とならないようです。
そこで、
$FielList = mb_convert_encoding(@implode('###', @file($csv,FILE_SKIP_EMPTY_LINES)), "UTF-8", "SJIS");
$RowData = split("###",$FielList);
とすれば、php4,php5でも動作します。
また、
$FielList = mb_convert_encoding(@implode('', @file($csv,FILE_SKIP_EMPTY_LINES)), "UTF-8", "SJIS");
$RowData = split("\n",$FielList);
とすると、php4で予想の結果が返されますが、
php5では、echo で何も表示されなくなります。
ません。

php4、php5による
\r\nの扱いの違い
implode()の動作の違い
file()の動作の違い
だと思うのですが、どのように違うのかがわかりません。
このあたりのことをおわかりの方、
implode('###',@file(・・・ )
と記述しなくても
implode('',@file(・・・ )
と記述することによりphp4、php5で同じように動作する方法がわからないでしょうか。
よろしくお願いいたします。

お世話になります。
SJISのファイルで、
//----コメント
//あああ
//---------------
あああ,いいいいいいいいいいいいい
ううううう,えええええええええええええ

のようなファイルを作成して
$csv へこSJISファイルのファイルパスを設定し、
$FielList = mb_convert_encoding(@implode('', @file($csv,FILE_SKIP_EMPTY_LINES)), "UTF-8", "SJIS");
$RowData = split("\r\n",$FielList);
foreach($RowData as $Value) {
$FName=trim($FName);$Cmnt=trim($Cmnt);
echo '$FName='.$FName.'<br> $Cm...続きを読む

Aベストアンサー

php4と5で動作が違うようなソースとは思えないけど、foreach で表示している変数名が違うので、ちゃんとデータの確認が出来てるのか疑問ですけど。
わざわさくっつけて分解するより mb_convert_variables() (php4.0.6以降)で配列のまま変換した方がいいと思う。内部では、implode,explodeを行っていますので同じことですが。
$RowData = file($csv,FILE_SKIP_EMPTY_LINES);
mb_convert_variables("UTF-8", "SJIS", $RowData ) ;
var_dump($RowData );

それから、デバッグ中は、エラー出力するようにした方がよいです、本当の問題が@により隠蔽されてるかもしれません。

Q拡張子表示をオフにしたまま拡張子変更をしたい

私はファイル名の拡張子は基本的に表示しないようにしています。しかしたまに拡張子変更する必要がある場合、現状はコントロールパネルのフォルダオプションから、「登録されている拡張子は表示しない」のチェックを外したうえで、対象ファイルの拡張子を変更しているため面倒です(変更した後は元の設定に戻しますし・・)
フォルダオプションの設定はそのままに拡張子を変更する簡略的な方法があれば教えていただきたいのです。ご回答よろしくお願いいたします。

Aベストアンサー

コマンドプロンプトでrenコマンドを使う

QPHP4とPHP5のGETでの値引き渡し および & と & の使い分けについて

PHP4では、

http://mydomain/test.php?a=1&amp;b=2

として、

test.php内で、
print "a=".$a.":"."b=".$b;

のとき、

a=1:b=2

と表示していました。

PHP5に移行したところ、$_GETを使わないといけないということで、

print "a=".$_GET["a"].":"."b="._GET["b"];

としたところ、

a=1:b=

となってしまい、bの値が取得できません。

そこで、

http://mydomain/test.php?a=1&amp;b=2

http://mydomain/test.php?a=1&;b=2

つまり、
「&amp;」の実体参照から「&」に変えると、

print "a=".$_GET["a"].":"."b="._GET["b"];



a=1:b=2

と表示できます。

Another HTML-lintの解説では、&amp;でなくてはいけないとかいてありますが、php5ではなぜ、&amp;では$_GETに値を引き渡せないのでしょうか?
(Another HTML-lintの解説)
http://openlab.ring.gr.jp/k16/htmllint/explain.html#bad-entity

ご存知の方が居られましたら、ご教示ください。

よろしくお願い致します。

PHP4では、

http://mydomain/test.php?a=1&amp;b=2

として、

test.php内で、
print "a=".$a.":"."b=".$b;

のとき、

a=1:b=2

と表示していました。

PHP5に移行したところ、$_GETを使わないといけないということで、

print "a=".$_GET["a"].":"."b="._GET["b"];

としたところ、

a=1:b=

となってしまい、bの値が取得できません。

そこで、

http://mydomain/test.php?a=1&amp;b=2

http://mydomain/test.php?a=1&;b=2

つまり、
「&amp;」の実体参照から「&」に変える...続きを読む

Aベストアンサー

>PHP5に移行したところ、$_GETを使わないといけないということで、
少なくともPHP4の頃からそうでしたが。

extract($_GET);なんて非推奨な事をしているコードは見たことありますが。
もしかしてそれ使ってたって事ですかね?

>Another HTML-lintの解説では、&amp;でなくてはいけないとかいてありますが、php5ではなぜ、&amp;では$_GETに値を引き渡せないのでしょうか?

W3C勧告にしても、どの勧告に従うかでまったく逆の事を書いていたりします。
RFCにしても同様。

なんといっても『私はW3C規格に忠実に作成したので、動作しないのはIEやFireFox等のブラウザ側がW3C規格を無視しているからです。修正するならブラウザ側です』などと言っても誰にも通用しませんから。

ちなみに、リンク先で『これは、CGI側の制約ではなくWWWブラウザ側の問題だからです。』と書かれているように、
http://mydomain/test.php?a=1&amp;b=2
と書かれたリンクをクリックした際に、
ブラウザが
http://mydomain/test.php?a=1&b=2
と解釈してリクエストしなければならないのが、本来の仕様なのでしょう。(※&gtの説明を見るとなおさら)
クリックした際に、アドレス欄のURLには&amp;のまま残ってませんか?

PHPとしては、&amp;b=2 と渡されたので、$_GET['amp;b']としないと値を取れないというところでしょうね。

過去に、&amp;を使っても動作していたというのであれば、もしかすると、リンク先の文献は既に過去のものになった仕様に基づいて書かれた過去の文献で、新しい仕様が勧告されているのかも知れませんね。

ま、私個人は『修正するならブラウザ側です』というつもりはないので、RFCやらW3Cには直接興味なしでそのあたりはまったく知りません。

>PHP5に移行したところ、$_GETを使わないといけないということで、
少なくともPHP4の頃からそうでしたが。

extract($_GET);なんて非推奨な事をしているコードは見たことありますが。
もしかしてそれ使ってたって事ですかね?

>Another HTML-lintの解説では、&amp;でなくてはいけないとかいてありますが、php5ではなぜ、&amp;では$_GETに値を引き渡せないのでしょうか?

W3C勧告にしても、どの勧告に従うかでまったく逆の事を書いていたりします。
RFCにしても同様。

なんといっても『私はW3C規格に忠実に作...続きを読む

Q拡張子の変更は可能ですか?

okwaveのプロフィール画像を変更しようと思いスクリーンショットで撮影した画像を使用したところ「拡張子が不正です」と表示され設定できませんでした。
他サイトでは使用できました。
拡張子とは簡単になんのことでしょうか?
また拡張子の変更は可能でしょうか?
可能ならば方法も教えて頂きたいです。

Aベストアンサー

拡張子はPCでファイルの種類を設定する為に使う文字列です。
PCではこの拡張子を使い指定のアプリを起動する様に設定します。
稀に適切な拡張子が付かない場合は拡張子文字列を変更します。
単に変更しただけではファイルの内容はそのままですので開けない事が有ります。

Macは基本的には拡張子文字列は必要有りませんので、標準では表示されていません。


拡張子の変更はファイルを『別名保存』します。

Q$str=preg_replace('/\u3000/','  ',$str);

によってutf-8の空白文字をhtmlの空白文字に変換しようとしたのですがエラーになります
どうしたらいいのでしょうか?

Aベストアンサー

>そもそも?のところにコード表現で空白文字を入力する手段はないのでしょうか?
\xE3\x80\x80
で一応いいかと思いますが…

Q拡張子の変更って・・・

拡張子の変更ってどうするんですか?
「ファイル名の拡張子を・・・」ってよく書かれているんですが、どこをどう変えていいか分かりません。
拡張子がどこにあるかも・・
もしかしたらものすごくアホな質問なのかもしれないのですが・・・
できる限り詳細にお願いしますm(_ _)m

ちなみに、私はvobからMpeg2に変更したいのです

Aベストアンサー

http://www.cdwavmp3.com/dl/extention/ext_hyouji.html

表示するように設定して
名前の変更で変えてください。

Qfile(test.php);のエラー

こんにちは。今、phpでアンケートを取るものを作っているのですが

ファイルしてください(testphp): 開くために失敗されて、流れてください: 系列123の/export/home/shirai/public_html/phptouhyou/touhyou1.phpのそのようなファイルかディレクトリでない

というエラーが出て解決策がなかなか浮かびません。

その箇所は

} else {

$enq = file(test.php);

$array_cnt = count($enq);

周辺だと思われるのですがわかる方がおりましたらどうかお知恵を拝借できないでしょうか?

Aベストアンサー

珍妙なメッセージで面食らいましたが、要は
内容を取り込もうとしているファイル(test.php)がみつからないということではないですか?
ちゃんとファイルは存在していますか?

あと
> $enq = file(test.php);

test.php という名前のファイルが対象なら
file('test.php')のようにクォートしないといけないのでは?

>周辺だと思われるのですがわかる方がおりましたら
日本語の勉強も忘れずしときましょうね。

Q拡張子の変更

動画をダウンロードし、
拡張子を変更して動画を見ようとしたのですが、

「ファイルを再生できません。プレーヤーがそのファイルの種類をサポートしていないか、そのファイルの圧縮に使用したコーデックをサポートしていない可能性があります。」

とばかり表示されます。
拡張子はサポートされるファイルの種類に変更しているのに、
ずっと上記の内容が表示されます。

拡張子の変更はサイトを見て正しくしているはずですが、
何か間違っているのでしょうか…

何方か拡張子の変更を詳しく教えて頂けませんか?
よろしくお願いします。

Aベストアンサー

拡張子を単純に変えるだけでは,名前を変えただけなのと同じで中身は変わっていません.なので,「変換」という作業を行わなければなりません.

まずは↓これをインストールした後
http://cowscorpion.com/Codec/ffdshow.html
以下のソフトで変換してみて下さい
http://www.gigafree.net/media/conv/mpg2avi.html

Qfile_exists('http://192.168.0.9/x.php');

が機能しません
file_exists('/var/www/html/x.php');
(FC4を使っている)

include('http://192.168.0.9/x.php');

機能します
どうしたら
file_exists('http://192.168.0.9/x.php');
も機能するようになるでしょうか?
file_existsの引数がURLのときにも機能するようにするにはどうすればよいのでしょうか?

Aベストアンサー

>どのラッパーが stat() ファミリーをサポートしているか
http://jp.php.net/manual/ja/wrappers.http.php
によるとHTTP プロトコルで stat( ) は、サポートしていないようです。
ファイルが存在するかどうかだけなら、fopen でオープンできるかどうかで代用できるような気がします。


人気Q&Aランキング