0

ドキュメント ルートにある bootstrap.php ファイルを除くすべてのファイルの mod-rewrite ブロック実行を使用したい。また、.git フォルダー (ドキュメント ルートにもある) 内のすべてのファイルへのアクセスをブロックしたい。もう 1 つの (おそらくより良い解決策) は、public というディレクトリ内のファイルのみにアクセスを許可し (アプリケーションのさまざまな部分に public というディレクトリが複数あります)、他のファイルへの直接アクセスを拒否し、他のすべての要求をブートストラップ経由で送信することです。 php ファイル。これが私が持っているものです。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /bootstrap.php

RewriteCond %{REQUEST_FILENAME} -fd
RewriteRule .*\.php /denied.php

RewriteCond %{REQUEST_FILENAME} -fd
RewriteRule \.git /denied.php

どんな提案でも大歓迎です。

4

2 に答える 2

1

ファイルの条件で複数の検証を使用することは許可されていません。次のようにbad flag delimiters使用すると、次のようなエラーが発生します。

RewriteCond %{REQUEST_FILENAME} !-fd

したがって、次のようになります。

Options +FollowSymLinks -MultiViews
RewriteEngine On

# not a existent file
RewriteCond %{REQUEST_FILENAME} !-f
# and not a folder
RewriteCond %{REQUEST_FILENAME} !-d
# and not a symbolic link
RewriteCond %{REQUEST_FILENAME} !-l
# and not bootstrap.php or denied.php
RewriteCond %{REQUEST_FILENAME} !(bootstrap.php|denied.php)$
# redirect to /bootstrap.php
RewriteRule .* /bootstrap.php

# is a existent file
RewriteCond %{REQUEST_FILENAME} -f [OR]
# or directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
# or symbolic link
RewriteCond %{REQUEST_FILENAME} -l
# and not bootstrap.php or denied.php
RewriteCond %{REQUEST_FILENAME} !(bootstrap.php|denied.php)$
# contains .php or .git + anything else redirect to /denied.php
RewriteRule \.(php|git)/?.*$ /denied.php

F代わりに、クライアント ブラウザに 403 FORBIDDEN 応答を返すフラグを使用することもできます。

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteCond %{REQUEST_FILENAME} !(bootstrap.php|denied.php)$
RewriteRule \.(php|git)/?.*$ - [F]
于 2013-08-10T01:39:52.443 に答える
0

一部のフォルダーへのアクセスを制限する一般的な方法は、独自の .htaccess ファイルをそのフォルダーに配置し、そのファイルにこのコードを使用することです

Order Allow,Deny
Deny from all

これにより、フォルダー全体 (およびそのフォルダー内のすべてのフォルダー) が (Web/インターネットから) アクセスできなくなります。

したがって、これをメインフォルダーで使用し、それを変更して、すべての「パブリックにアクセスされるファイル」(画像や .css など) を保存するフォルダーを 1 つだけ許可するようにすると、それが最適なソリューションになると思います。あなた。

このような1つのフォルダーを許可できます

Order Allow,Deny
Allow /onefoldername
Deny from all

これにより、「onefoldername」という名前のフォルダー以外は Web からアクセスできなくなります。

于 2013-08-10T01:33:03.420 に答える