Ich habe eine Tomcat 6 Web App mit Apache httpd als Frontend ausgeführt. Ich verwende mod_proxy und mod_proxy_ajp, um die Anfragen an tomcat weiterzuleiten. Auf meinem Server läuft ubuntu. Jetzt versuche ich mod_rewrite zu verwenden, um das führende www zu entfernen, so dass meine kanonische Website-URL ist http://domain.com statt http://www.domain.comWie kann ich beheben, warum meine Umschreibungsregeln nicht von Apache angewendet werden?
ich eine Reihe von Tutorials zur Verwendung von mod_rewrite gelesen habe, aber ich kann kein Umschreiben erhalten Arbeit. Ich habe versucht, die Rewrite-Regel in eine .htaccess-Datei zu setzen (nachdem ich meine/etc/apache/sites-available/default-Datei geändert habe, um AllowOverride all zu setzen). Ich habe versucht, die Rewrite-Regel in apache2.conf, httpd.conf und rewrite.conf zu setzen. Ich habe alle diese mit dem eingeschriebenen Überschreiben versucht versucht. Die Protokolldatei wird erstellt, aber Apache hat nichts geschrieben. Ich dachte, dass mod_proxy irgendwie verhinderte, dass die Rewrite-Regeln verwendet wurden, also habe ich versucht, das auch zu deaktivieren ... und ich bekomme immer noch keine Neuschrift und nichts zum Log.
An diesem Punkt habe ich absolut keine Ahnung, was ich als nächstes versuchen soll. Wie gehe ich bei der Fehlersuche vor, warum Apache nicht meine Umschreibungsregeln verwendet?
Als Referenz sind hier meine Rewrite-Richtlinien:
<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 Antworten unten hilfreich sind zu meinem speziellen Fall, aber wahrscheinlich nicht so nützlich für die Gemeinschaft-at-large als Antworten darüber, wie Sie behandeln Apache-Anweisungen im Allgemeinen. Gibt es zum Beispiel eine Möglichkeit, die Protokollierung an dem Punkt zu aktivieren, an dem sie mir mitteilen würde, welche Anweisungen in welcher Reihenfolge angewendet werden, während die Anfrage eingeht?
Bearbeiten 2: Ich habe Dinge zur Arbeit jetzt. Meine virtuellen Hosts waren nicht richtig eingerichtet, und ich hatte auch die Regex-Regex nicht richtig. Hier ist die endgültige Neuschreiben Anweisungen, die ich zu arbeiten:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domain.com$1 [L,R=301]
</IfModule>
Haben Sie sichergestellt, dass mod_rewrite geladen ist? –
Ja. Ich habe es mit "a2enmod rewrite" geladen, was einen Symlink in mods-enabled gesetzt hat, um auf mod \ _rewrite.load in mod-available zu zeigen. Ich habe auch versucht, absichtlich eine der Rewrite-Regeln falsch zu schreiben (d. H. "Rewrite3Rule"), um zu testen, dass die Regeln tatsächlich von Apache aufgenommen werden, und Apache gibt mir eine Fehlermeldung, wie ich es erwarten würde. Wenn ich die Rechtschreibung repariere und apache neu starte, fängt es gut an. –