1

私のフォルダ構造は次のようになります。

-beta
   +folder1
   +folder2
   +folder3
   file1.php
   file2.php

今、私はすべてのファイルとフォルダーを制限したいのですが、folder2 と file2.php は制限したくありません。これは私が書いたものです。

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !/folder2%$
RewriteCond %{REQUEST_URI} !/file2.php
RewriteRule $ /beta/file2.php [R=302,L]

どういうわけか、上記はあるシステムでは機能しますが、他のシステムでは機能しません。ここで私が間違っていることを指摘できますか?

ありがとう、

サハ

4

2 に答える 2

4

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」。

于 2012-08-31T07:53:46.797 に答える
0

REQUEST_FILENAMEこれが役立つことをREQUEST_URI願っています

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !/folder2
RewriteCond %{REQUEST_FILENAME} !/file2.php
RewriteRule $ /file2.php [R=302,L]
于 2012-08-31T07:52:33.210 に答える