Frage

Ich habe eine Tomcat 6-Webanwendung mit Apache httpd als Frontend.Ich verwende mod_proxy und mod_proxy_ajp, um die Anfragen an Tomcat weiterzuleiten.Auf meinem Server läuft Ubuntu.Jetzt versuche ich, mit mod_rewrite das führende www zu entfernen, sodass meine kanonische Website-URL lautet http://domain.com statt http://www.domain.com

Ich habe eine Reihe von Tutorials zur Verwendung von mod_rewrite gelesen, aber es gelingt mir nicht, das Umschreiben zum Laufen zu bringen.Ich habe versucht, die Rewrite-Regel in eine .htaccess-Datei einzufügen (nachdem ich meine Datei /etc/apache/sites-available/default geändert habe, um AllowOverride all festzulegen).Ich habe versucht, die Rewrite-Regel in apache2.conf, httpd.conf und rewrite.conf einzufügen.Ich habe all dies mit aktivierter Rewrite-Protokollierung ausprobiert.Die Protokolldatei wird erstellt, aber Apache hat nichts hineingeschrieben.Ich dachte, dass mod_proxy vielleicht irgendwie die Verwendung der Rewrite-Regeln verhindert, also habe ich versucht, auch das zu deaktivieren ... und ich bekomme immer noch kein Rewrite und nichts im Protokoll.

Zu diesem Zeitpunkt habe ich absolut keine Ahnung, was ich als nächstes versuchen soll.Wie gehe ich bei der Fehlerbehebung vor, warum Apache meine Umschreiberegeln nicht verwendet?

Als Referenz hier meine Rewrite-Anweisungen:

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

Bearbeiten:Die folgenden Antworten sind für meinen speziellen Fall hilfreich, aber wahrscheinlich nicht so hilfreich für die Community als Ganzes wie Antworten zur allgemeinen Fehlerbehebung bei Apache-Anweisungen.Gibt es beispielsweise eine Möglichkeit, die Protokollierung so weit zu aktivieren, dass mir beim Eintreffen der Anfrage mitgeteilt wird, welche Anweisungen in welcher Reihenfolge angewendet werden?

Bearbeiten 2:Ich habe die Dinge jetzt zum Laufen gebracht.Meine virtuellen Hosts waren nicht ganz richtig eingerichtet und ich hatte auch nicht ganz die richtige Rewrite-Regex-Funktion.Hier sind die endgültigen Rewrite-Anweisungen, die ich an die Arbeit bekommen habe:

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

Lösung

Versuchen Sie, Ihre Frage zu beantworten: Um den Apache -Betrieb zu debuggen, können Sie die anpassen Loglevel auf eine niedrigere Ebene (vielleicht debug). Aber selbst wenn Sie setzen debug Wenn Sie das Protokoll für das fragliche Modul deaktivieren, erhalten Sie keine Nachrichten davon. Zum Beispiel die Standardeinstellung [RequestLogLevel][2] ist 0, z. B. das Modul schreibt keine Nachrichten. Ich sehe, dass du es auf 3 gesetzt hast, aber gefällt Roborg sagte, ändern Sie es zu 9 Das ist vielleicht zu niedrig für Ihren Fall.

Ich versuche, dein Problem zu steigern: Versuchen Sie, die Art und Weise zu ändern, wie Sie den Hostnamen mithilfe des inversen Formulars neu schreiben. Schauen Sie, ob der Hostname das ist, was Sie wollen, und wenn nicht, ändern Sie ihn in den gewünschten Hostnamen. Wie gesagt in der URL Rewriting Guide - Apache HTTP -Server Auf der Apache -Site:

Kanonische Hostnamen

Beschreibung: Das Ziel dieser Regel ist es, die Verwendung eines bestimmten Hostnamens in anderen Hostnamen zu erzwingen, die verwendet werden können, um dieselbe Stelle zu erreichen. Wenn Sie beispielsweise die Verwendung von www.example.com anstelle von Beispiel.com erzwingen möchten, können Sie eine Variante des folgenden Rezepts verwenden. Lösung:

# 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]

In ihrem Beispiel ändern sie sich von example.com zu www.example.com Aber du hast die Idee. Passen Sie es einfach für Ihren Fall an.

Andere Tipps

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

</IfModule>

Hatte das gleiche Problem mit meinem Server, aber das funktionierte

Versuchen Sie, das Protokollierungsniveau auf 9 zu erhöhen (das Maximum).
Stellen Sie sicher, dass Apache die richtigen Rechte an der Protokolldatei hat (obwohl es, wenn sie sie erstellt hat, wahrscheinlich auch darauf schreiben könnte).
Versuchen Sie beispielsweise eine andere Umschreiberegel ohne Bedingung ohne Bedingung RewriteRule .* www.google.com [RL]

In welchen Kontext werden diese Regeln gestellt?Sie könnten sie beispielsweise unter einem anderen virtuellen Host platzieren.Versuchen Sie, sie außerhalb eines Containers zu platzieren, wenn Sie nur eine Domäne zum Testen haben.

In jedem Fall gibt es eine Alternative, um „no-www“ zu erreichen, die darin besteht, zwei virtuelle Hosts zu verwenden, einen für www und einen anderen für „no-www“.www man leitet zum anderen weiter:

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top