2

私は Apache の経験が限られており、RewriteRules の経験はさらに少ないです。誰かがこれについて正しい方向に向けてくれることを願っています。

毎朝、午前 5:00 から午前 5:30 の間にサーバーで実行されるいくつかのスケジュールされたタスクがあります。この間、Web リクエストを「メンテナンス中」のページに再ルーティングしたいと考えています。htaccess ページを使用すると、多くの設定変更を維持することなく、要求を汎用ページに向けることができるため、非常に理にかなっていると思いました。私の質問には2つの部分があります:

  1. htaccess ファイルの RewriteCond ステートメントを現在の時刻/日付と比較するのが最善の方法ですか?
  2. ページ (つまり index.htm) への直接アクセスを防止するルールを作成できますか? もしそうなら、これはすべてのサブフォルダーにも指定できますか?

RewriteCond TIME 変数が "yyyymmddhhnnss" として表示されるとすると、次のようになると思います。

RewriteCond %{TIME} ^(([0-9]{8})[0][5][0-2][0-9][0-5][0-9])
RewriteRule .* http://mysite.com/under_maintenance.htm

これはまったく意味がありますか?あなたが提供できるすべての支援に感謝します。

ありがとう!

クレイグ

4

1 に答える 1

0

これを自動的に実行したい場合は、%{TIME_HOUR}および%{TIME_MIN}varsに対して具体的に一致させることができます。

# hour = 05
RewriteCond %{TIME_HOUR} 05

# minute between 00 and 31
RewriteCond %{TIME_MIN} >00 [OR]
RewriteCond %{TIME_MIN} 00
RewriteCond %{TIME_MIN} <31

# can add other exceptions here

# make sure the request isn't FOR the maintenance page    
# redirect to maintenance
RewriteRule !^/?under_maintenance.htm$ http://mysite.com/under_maintenance.htm [L,R]

この 302 (一時)は、メンテナンス ページを除くすべての要求http://mysite.com/under_maintenance.htmに対してリダイレクトされます。したがって、答えは次のとおりです。

  1. はい、時間を比較するために a を使用できますRewriteCond。これは、余分なことをすることなくこれを自動化する良い方法です。
  2. このルールにより、メンテナンス ページ以外のすべてにアクセスできなくなります。の前に追加の条件を追加することで、これを変更できますRewriteRule。たとえば、 を許可する場合は/special_page.htm、次を追加します。

    RewriteCond %{REQUEST_URI} !^/special_page.htm$
    

    すべての iamges と css を許可する場合は、次を追加します。

    RewriteCond %{REQUEST_URI} !\.(css|png|jpe?g|gif|ico)$ [NC]
    
于 2012-09-17T21:00:27.667 に答える