2 つのフォルダーを通過させ、すべてを file2 にリダイレクトするようにルールを変更してみてください。
Options +FollowSymlinks
RewriteEngine on
RewriteBase /beta/
RewriteRule ^file2\.php - [L]
RewriteRule ^folder2 - [L]
RewriteRule ^ file2.php [L,R=302]
あなたが得ていたエラーは、おそらく%
あなたがあなたの状態で持っていたものからのものです.
他のものへのアクセスを完全に禁止したい場合は、最後のルールを次のように変更できます。
RewriteRule ^ - [L,F]
よろしければ各行の説明をお願いできますか?
このRewriteBase
ディレクティブは、相対パスの URI ベースが であることを書き換えエンジンに知らせます/beta/
。したがって、a で始まらないすべてのファイル/パス名は、/
自動的にそのベースになります。
次の 2 つのルールは、単純に URI に対して一致し、文字を使用して「パススルー」を-
実行します。つまり、「何もしない」ことを意味します。したがって、/folder2
またはを要求する/file2.php
と、書き換えエンジンは何もせず、何も起こらなかったかのように要求を通過させます。しかし、リクエストがそれ以外の場合、正規表現が^
であるため、最初の 2 つのルールは一致せず、最後のルールが一致します。これはすべてに一致します。そのルールのターゲットは、すべてをリダイレクトします/beta/file2.php
(ベースのため)。
角括弧内のフラグを含む禁止ルールF
は同じことです。リクエストが folder2 または file2.php に対するものでない場合、そのルールはそれに一致し ( ^
)、それを通過させます ( -
) が、F
フラグにより返されます。リクエストの目的が何であれ、サービスを提供する代わりに「403 Forbidden」。