8

リライトを追加するたびに、RewriteEngineOnとRewriteBaseを含める必要があるかどうか疑問に思っていました。たとえば、「URLからQUERY_STRINGを削除する^」と「1日の特定の時間帯にファイルへのアクセスをブロックする^」の両方を使用したいと思います(askapache.comから引用した例)

URLからQUERY_STRINGを削除します

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} .
RewriteRule ^login.php /login.php? [L]

1日の特定の時間帯にファイルへのアクセスをブロックする^

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# If the hour is 16 (4 PM) Then deny all access
RewriteCond %{TIME_HOUR} ^16$
RewriteRule ^.*$ - [F,L]

それらを次のように組み合わせることができますか?

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} .
RewriteRule ^login.php /login.php? [L]
# If the hour is 16 (4 PM) Then deny all access
RewriteCond %{TIME_HOUR} ^16$
RewriteRule ^.*$ - [F,L]

よろしくお願いします。

4

2 に答える 2

4

はい、一度だけ指定する必要がRewriteEngineありRewriteBaseます。

于 2013-02-18T23:42:29.070 に答える
2

RewriteEngine On書き換えルールがある各htaccessファイルに必要ですが、1回だけです。それ以外の場合、ルールは無視されます。

についてはRewriteBase、ターゲットとして相対URIがある場合、またはルールを移植可能にする場合にのみ必要です(したがって、ルールをあるディレクトリから別のディレクトリに移動する場合にのみベースを変更する必要があります)。例えば:

RewriteBaseこれらのルールは必要ありません。

RewriteRule ^login.php /login.php? [L]

RewriteRule ^.*$ - [F,L]

は相対URIではないため/login.php、文字通り参照していると理解され、パススルーを意味http://domain.com/login.phpするだけなので、ベースはとにかく無視されます。-

あなたが使用したいと思うかもしれないインスタンスRewriteBase

RewriteRule ^dir/(.*)$ dir2/$1 [L,R=301]

RewriteBase /Apacheがないと、ファイルパスなのかURIパスなのかを誤って推測しdir2/$1、間違った場所にリダイレクトする可能性があります。その後RewriteBase /、正しくリダイレ​​クトされます。

于 2013-02-18T23:49:09.943 に答える