7

フロントエンドとしてApache httpdで実行されているTomcat 6 Webアプリがあります。mod_proxy と mod_proxy_ajp を使用して、リクエストを tomcat に転送しています。私のサーバーはubuntuを実行しています。現在、mod_rewrite を使用して先頭の www を削除しようとしているため、正規の Web サイトの URL はhttp://www.domain.comではなくhttp://domain.comになります。

mod_rewrite の使用に関する多くのチュートリアルを読みましたが、書き換えが機能しません。書き換えルールを .htaccess ファイルに入れてみました ( /etc/apache/sites-available/default ファイルを変更して AllowOverride all を設定した後)。apache2.conf、httpd.conf、rewrite.confに書き換えルールを入れてみました。書き換えログをオンにして、これらすべてを試しました。ログ ファイルは作成されますが、apache はそれに何も書き込んでいません。おそらく mod_proxy が書き換えルールの使用を何らかの形で妨げているのではないかと考えたので、それも無効にしてみました...それでも書き換えは行われず、ログにも何も記録されません。

この時点で、次に何を試すべきかまったくわかりません。Apache が書き換えルールを使用しない理由をトラブルシューティングするにはどうすればよいですか?

参考までに、私の書き換えディレクティブは次のとおりです。

<IfModule mod_rewrite.c>

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
    RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
    RewriteLog "/var/log/apache2/rewrite.log"
    RewriteLogLevel 3

</IfModule>

編集:以下の回答は私の特定のケースに役立ちますが、一般的なApacheディレクティブのトラブルシューティング方法に関する回答ほどコミュニティ全体にはおそらく役に立ちません. たとえば、リクエストが入ったときにどのディレクティブがどの順序で適用されているかを教えてくれるポイントまでロギングを有効にする方法はありますか?

編集2:私は今、物事をうまく動かしています。私の仮想ホストは正しくセットアップされていませんでした。また、正規表現を書き換える権利もありませんでした。これが、私が作業するようになった最終的な書き換えディレクティブです。

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
        RewriteRule ^(.*)$ http://domain.com$1 [L,R=301]
</IfModule>
4

4 に答える 4

4

あなたの質問に答えようとしています: Apache 操作をデバッグするには、LogLevelをより低いレベル (おそらくdebug) に調整できます。ただしdebug、問題のモジュールのログを無効にしても、そこからメッセージが表示されません。たとえば、デフォルト[RequestLogLevel][2]は 0 です。たとえば、モジュールはメッセージを書き込みません。3に設定したようですが、 RoBorgが言ったよう9に、あなたのケースには低すぎるかもしれません.

問題を解決しようとしています: 逆形式を使用してホスト名を書き換える方法を変更してみてください。ホスト名が目的のものであるかどうかを確認し、そうでない場合は目的のホスト名に変更してください。URL Rewriting Guide - Apache サイトの Apache HTTP Serverに記載されているように:

正規のホスト名

説明: このルールの目的は、同じサイトに到達するために使用される可能性のある他のホスト名に優先して、特定のホスト名の使用を強制することです。たとえば、example.com ではなく www.example.com を強制的に使用する場合は、次のレシピの変形を使用できます。解決:

# To force the use of 
RewriteEngine On
RewriteCond %{HTTP_HOST}   !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www.example.com/$1 [L,R]

彼らの例では、それらは から に変わりexample.comますwww.example.comが、あなたはアイデアを得ました. ケースに合わせて調整してください。

于 2008-10-18T19:08:59.390 に答える
1

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
    RewriteRule ^(.*)$ "http\:\/\/domain\.com\/$1" [R=301,L]

</IfModule>

私のサーバーにも同じ問題がありましたが、これはうまくいきました

于 2008-10-18T18:12:27.583 に答える
0

ログレベルを 9 (最大) まで上げてみてください。
apache がログ ファイルに対する適切な権限を持っていることを確認してください (ただし、apache がログ ファイルを作成した場合は、それに書き込むこともできるようです)。
たとえば、条件なしで別の書き換えルールを試してください。RewriteRule .* www.google.com [RL]

于 2008-10-18T18:00:26.597 に答える
0

これらの規則はどのような文脈に置かれていますか? たとえば、それらを別の仮想ホストの下に配置している可能性があります。テストするドメインが 1 つしかない場合は、コンテナの外に配置してみてください。

いずれにせよ、「no-www」を実現するための代替手段があり、1 つは www 用、もう 1 つは「no-www」用の 2 つの仮想ホストを使用することで構成されます。www 1 つはもう 1 つにリダイレクトします。

<VirtualHost *:80>
    ServerName www.domain.com
    Redirect permanent / http://domain.com
</VirtualHost>


<VirtualHost *:80>
    ServerName domain.com
    #The rest of the configuration (proxying, etc.)
</VirtualHost>
于 2008-10-18T18:16:16.750 に答える