3

これは基本的にこの質問の複製ですが、注意点が1つあります。ルートディレクトリの下にあるindex.phpという名前のすべてのファイルへの直接アクセスを拒否したいということです。

許可:/index.php

拒否:/application/views/settings/index.php

PHPを使用して定義済みの定数または変数を検索できることは知っていますが、.htaccessのみを使用してこれを実現することは可能ですか?これは私がこれまでに持っているものです:

##
# Disallow direct access to files.
#

<FilesMatch "^(.*)\.php$">
    Order Deny,Allow
    Deny from all
</FilesMatch>

<FilesMatch "^index\.php$">
    Order Allow,Deny
    Allow from all
</FilesMatch>

FilesMatch拒否するために3分の1を追加"^(.*)/index/index\.php$"しても機能しません。

4

3 に答える 3

2

<FilesMatchまたはディレクティブだけでそれを行うことはできません。<Files>それらを。と組み合わせる必要があります<Directory。例えば:

<Directory /var/www>
  <FilesMatch "\.php$">
    Order Deny,Allow
    Deny from all
  </FilesMatch>
  <FilesMatch "^index\.php$">
    Order Allow,Deny
    Allow from all
  </FilesMatch>
</Directory>

<Directory /var/www/*>
  <FilesMatch "\.php$">
    Order Deny,Allow
    Deny from all
  </FilesMatch>
</Directory>

ここでの注意点は、ディレクティブはで使用できないためhttpd.conf、ファイルまたは同様のファイルを編集する必要があるということです。<Directory>.htaccess

.confファイルを更新できず.htaccess、それが唯一の方法である場合は、表示されているルールを各ディレクトリにコピーする必要が.htaccessあると思います。if(defined(...))トリックを使うより良いかどうかはあなた次第です。

于 2012-11-06T15:00:31.970 に答える
0

デモ

(?<![^\/])\/index\.php

簡単な正規表現です。もっと正確なものが必要な場合があります。

于 2012-11-06T13:09:23.963 に答える
0

では、index.phpが直接呼び出されないようにしたいですか?

最も人気のあるWebアプリがこれを行う方法は、どこかに定数を定義し、直接呼び出されたくないすべてのファイルにその定数のチェックを追加することです。

直接呼び出すことができ、他のindex.phpファイルを含むメインファイルで、次の手順を実行します。

define ("CAN_RUN", true);

直接呼び出されたくないすべてのサブファイル:

if (!defined("CAN_RUN")) die ("This file can't be called directly.");
于 2012-11-06T13:09:26.390 に答える