0

.htaccess ファイルの書き換えルールに問題があります。ルート ディレクトリに .htaccess ファイルを 1 つ置き、そこにルールを設定して、人々がブラウザ経由で直接ファイルにアクセスできないようにしたいと考えています。したがって、たとえば、フォルダー blah/includes/file.php があり、.htaccess ファイルが blah/ フォルダーにある場合、人々がブラウザー blah/includes/file.php に入力してそのファイルを取得できないようにしたいのですが、また、アプリ内の関数でこれらのファイルを使用できるようにしたいと考えています。彼らが私のインクルードファイルの正確な名前を知ることはほとんど不可能であることは理解していますが、確認したいと思います. 前もって感謝します。

応答していない私のコードは次のとおりです。

<IfModule mod_rewrite.c>
    ## Enable Mod Rewrite, this is only required once in each .htaccess file
    RewriteEngine On
    RewriteBase /
    ## Test for access to includes directory
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /includes/ .*$ [NC]
    ## Test that file requested has php extension
    RewriteCond %{REQUEST_FILENAME} ^.+\.php$
    ## Forbid Access
    RewriteRule .* - [F,NS,L] 
</IfModule>

注:それが重要な場合は、ローカルホストでテストしています。

4

2 に答える 2

1

問題は、/includes/ の後にスペースがある最初の RewriteCond にあり、エラーがスローされます。

%{THE_REQUEST}BUT: HTTP リクエストが含まれているため、使用しません( http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecondを参照)。%{REQUEST_URI}代わりに使用してください。

したがって、 へのアクセスを禁止したい場合は/<folder>/include/*.php、次のコードだけを使用できます。

 <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/[^/]+/includes/.*\.php$ [NC]
    RewriteRule .* - [F,NS,L]
 </IfModule>

.htaccess が blah/ フォルダーにあると仮定します。

于 2013-01-31T12:44:21.407 に答える
0

最も簡単な方法は、 includesディレクトリに 1 行の.htaccessファイルを配置することです。

deny from all

もう 1 つの方法は、includesフォルダーを Web アクセス可能なディレクトリの外に配置することです。

/home/
    /username/
        /includes/
        /public_html/
            /index.php

それでもa を使用したい場合RewriteRuleは、これを使用します。

RewriteRule ^includes/ - [F,L,NC]

401 Forbiddenで始まる URI にアクセスしようとすると、応答が返されますincludes

于 2013-01-31T12:43:39.250 に答える