9

を介してリクエストをリダイレクトする必要があるフロントエンドに Apache がありRewriteRuleます。

リクエストがリダイレクトされる前に基本認証を設定する必要があるため、これを構成ファイルに追加します。

<VirtualHost *:443>
    ServerAdmin xxxxxx
    DocumentRoot /var/www/html/
    ServerName xxxxxxx
    RewriteEngine on
    ErrorLog logs/error.log
    CustomLog logs/access_log common

    <Directory /var/www/html/>
        AuthType Basic
        AuthName "Restricted Files"
        AuthUserFile /etc/httpd/conf/tag.pwd
        Require valid-user
        RewriteRule ^/(.*) http://xxxxxx:xxx/$1   [P,L]
    </Directory>
</VirtualHost>

しかし、うまくいきません。

助言がありますか?

更新:認証後のすべてのリクエストがルールでリダイレクトされることを期待していますRewriteRule ^/(.*) xxxxxx:xxx/$1 [P,L]が、これは起こりません。Apache でページを検索/var/www/html

4

4 に答える 4

11

一般に、Apache は認証フェーズの前に書き換えフェーズを実行します。これが、コードがユーザーに認証を求めることなく書き換えを実行する理由です。

LA-U:REMOTE_USERこれは、変数を使用して回避できます。RewriteRule の前に、承認フェーズを先読みする条件 (「LA」) を追加します。

RewriteCond %{LA-U:REMOTE_USER} !^$
RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [L]

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecondでこれに関するメモを参照してください。

他の投稿者が指摘しているように、 RewriteRule ディレクティブをブロックから取り出して、信頼性を高めることもお勧めします。

于 2012-11-08T18:05:17.560 に答える
5

書き換え条件と書き換えルールを Locatio ディレクティブの外に置くことを解決しました。

<Location />
  AuthType Basic
  AuthName "Restricted Files"
  AuthUserFile /etc/httpd/conf/tag.pwd
  Require valid-user
</Location>
RewriteCond %{LA-U:REMOTE_USER} !^$
RewriteRule ^/(.*) http://xxxxxx:xxx/$1   [P,L]

提案してくれたh0tw1r3に感謝します

* Location ディレクティブは、ディレクトリではなく URL で動作することに注意してください。つまり、誰かがドキュメント ルートへのエイリアスを作成すると、これらの認証ルールを完全にバイパスすることになります。(詳細については、 http://httpd.apache.org/docs/2.0/mod/core.html#locationを参照してください。)

于 2010-04-12T09:12:11.223 に答える
2

更新: 暗黙的なディレクトリ ルールにより、書き換えが完了する前に常に検証が必要になります。Apache モジュールのさまざまな組み合わせが動作を変更したため、受け入れられた回答が常に機能するとは限りません。

<Location />
    AuthType Basic
    AuthName "Restricted Files"
    AuthUserFile /etc/httpd/conf/tag.pwd
    Require valid-user
</Location>

<Directory /documentroot>
    RewriteCond %{LA-U:REMOTE_USER} (.+)
    RewriteRule (.*) http://xxxxxx:xxx/$1   [P,L]
</Directory>
于 2010-04-11T05:45:57.483 に答える