ホームページ  >  記事  >  バックエンド開発  >  Apache_PHPチュートリアルでphpファイルへの直接アクセスを禁止する解決策

Apache_PHPチュートリアルでphpファイルへの直接アクセスを禁止する解決策

WBOY
WBOYオリジナル
2016-07-21 15:11:43961ブラウズ

当初はリライトルールでphp接尾辞が付いたURLへのアクセスを直接禁止したかったのです。しかし、書き換えルールが再帰的に呼び出されることが後で判明しました。書き換えルールで php が直接禁止されている場合、php ファイルに書き換えられたルールも無効になります。 RewriteEngineOn

コードをコピー コードは以下の通りです:

RewriteRule^test$/test.php[L]
RewriteRule^test.php$$0[F,L]
Apache下禁止php文件被直接访问的方法

これは再帰呼び出しで本当に怖いです。最初に /test にアクセスすると、URL の書き換えが一度チェックされ、^test$ が一致すると内部的に /test.php にリダイレクトされます。 URL書き換えなので再度確認すると、^test.php$と一致し、直接[F](Forbidden)操作を強いられたため、403エラーとなりました。この場合、サーバーによってリダイレクトされたかどうかを判断する必要があります。この時、サーバー変数にREDIRECT_URLというものが使えるようになっていたので、これを使って判断してみました。

コードをコピーします コードは次のとおりです:

RewriteEngineOn
RewriteRule^test$/test.php[L]
RewriteCond%{REDIRECT_URL}^$

RewriteRule.*$0[F,L] は、/test への書き込みアクセス時に依然として 403 を取得します。少し調べたところ、RewriteCond の %{REDIRECT_URL} が常に空であることがわかりました。これは、この場合、何もありません。 PHP の書き換えルールで直接使用する方法は禁止されています。しかし、それはそれほど派手ではない方法でも達成できます。 php ファイル内の REDIRECT_URL を判断するだけで、この方法は実装できますが、非常に劣っているように感じますが、これより良い方法は今のところ見つかりません。

コードをコピーします コードは次のとおりです:

$_SERVER['REDIRECT_URL']ordie('Forbidden')
//これはテキストを表示するだけであり、HTTPエラーコードは実際に使用するときに出力されます。
echo$_SERVER['REDIRECT_URL'];//アクセス成功情報表示
?>
このPHPコードを修正してグローバル参照に放り込めば基本的には問題ありませんが、将来的にはもっと良い方法が見つかるかもしれません。

http://www.bkjia.com/PHPjc/326799.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/326799.html技術記事最初は、書き換えルールで php 接尾辞を持つ URL へのアクセスを直接禁止したいと考えていました。しかし、後で、書き換えルールが再帰的に呼び出されることを発見しました。 php が書き換えルールで直接禁止されている場合は、... に書き換えます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。