2017-05-01 8 views
1

Wir betreiben Apache-Server unter Linux.301 Redirect funktioniert nicht auf neuem Server

Im <VirtualHost> der Apache Config-Datei (in /etc/apach2/sites/site.conf), haben wir die folgende Rewrite-Regel:

Der Zweck dieser Regel ist, so dass, wenn jemand die Website zugreift (die mit mehreren Domänen zugegriffen werden kann) Versuche, ohne www. vor zu gelangen, wird 301 umleiten auf www.. Wenn ein Benutzer beispielsweise zur Site http://example.com wechselt, wird die Regel 301 an http://www.example.com umleiten.

RewriteEngine on 

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTP_HOST} ^([a-z.]+)$ [NC] 
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L] 

Wir haben diese gleiche Regel Setup auf anderen Servern und arbeiten gut, aber aus irgendeinem Grund bekommen wir können einfach nicht auf diesem neuen Server arbeiten. Das Neustarten von Apache ist in Ordnung usw. Aber wenn wir auf die Seite mit example.com zugreifen, wird es nicht auf www.example.com umgeleitet.

Irgendwelche Vorschläge oder frühere Erfahrungen, die einige Hinweise geben können, verursachen?

=========

Hier ist eine erweiterte Version des Config für Kontext.

<Directory /> 
       Options FollowSymLinks 
       AllowOverride None 
     </Directory> 
     <Directory /var/www/site/> 
       Options Indexes FollowSymLinks MultiViews 
       AllowOverride None 
       Order allow,deny 
       allow from all 

       RewriteEngine on 

       # force www 
       RewriteCond %{HTTP_HOST} !^www\. [NC] 
       RewriteCond %{HTTP_HOST} ^([a-z.]+)$ [NC] 
       RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L] 

       # Bypass images, css, javascript and docs, add your own extensions if needed. 
       RewriteCond %{REQUEST_URI} \.(bmp|gif|jpe?g|png|css|js|txt|pdf|doc|xls|ico)$ 
       RewriteRule ^(.*)$ - [NC,L] 

       # The ColdBox index.cfm/{path_info} rules. 
       RewriteRule ^$ index.cfm [QSA,NS] 
       RewriteCond %{REQUEST_FILENAME} !-f 
       RewriteCond %{REQUEST_FILENAME} !-d 
       RewriteRule ^(.*)$ index.cfm/%{REQUEST_URI} [QSA,L,NS] 

     </Directory> 
+0

Ist mod_rewrite aktiviert? Nur zur Verdeutlichung, ist diese Direktive direkt in der Serverkonfiguration (oder dem virtuellen Hostkontext) - was Sie zu implizieren scheinen? Wenn es dann ist, ist diese Direktive nicht genau richtig. – MrWhite

+0

Hallo w3dk, ja, mod_rewrite ist aktiviert (andere neu definierte Schreibweisen funktionieren einwandfrei). Die Anweisung befindet sich im virtuellen Host> Verzeichniskontext. ... Jason

+1

Sind die anderen Umschreibungen (die funktionieren) im selben Verzeichniskontext? 'FollowSymLinks' muss in einem Verzeichniskontext gesetzt werden.In Ihrer Regex ist der Bindestrich nicht enthalten. Daher enthalten Ihre Domainnamen vermutlich keinen Bindestrich? Welche Version von Apache? Hast du _debugging_ aktiviert? Überprüfen Sie den Wert von 'HTTP_HOST' (z. B. einer Umgebungsvariablen zuweisen und Ihren Code einchecken). – MrWhite

Antwort

1

Kommentar: Ich habe die RewriteRule hinzugefügt, wie Sie .. vorgeschlagen und das scheint in Ordnung Umschreiben werden. 119.9.30.242/foo umschreibt zu http://119.9.30.242/bar?host=119.9.30.242

Aber in der Frage, die Sie erwähnt:

... aber wenn wir die Seite mit example.com zuzugreifen, wird Umleitung nicht zu www.example.com

Sie scheinen mit einer IP-Adresse auf die Site zuzugreifen, nicht mit einem Domainnamen ?!

Wenn Sie die Website von der IP-Adresse zugreifen (kein Domänenname), dann ist dies offensichtlich nicht umleiten würde, da die vorhergehenden RewriteCond Richtlinie überprüft die Host-Name:

RewriteCond %{HTTP_HOST} ^([a-z.]+)$ [NC] 

Dieses nur Host-Namen ermöglicht, dass bestehen aus Buchstaben und Punkten, keine Ziffern oder Bindestriche (wie ich in meinem vorherigen Kommentar erwähnt habe), so dass IP-Adressen von der Umleitung ausgeschlossen werden. (Und richtig so, würde http://www.119.9.30.242/ ungültig.)

UPDATE: Damit/umleiten Domains mit Ziffern (und Bindestrichen), dann müßten Sie das oben genannte Richtlinie/Regex ändern:

RewriteCond %{HTTP_HOST} ^([a-z0-9.-]+)$ [NC] 
+0

Danke w3dk .. das war nur zum Beispiel .. auch wenn der Zugriff auf die Website über die Domain das gleiche Problem hat. Hier ist eine Domain, die nicht umleitet: http://sample.membes3.com.au/. Und interessanterweise, jetzt, wo du es erwähnst, leitet http://sample.membes3.com.au/?foo nicht zum Balken um. – Jason

+0

'sample.membes3.com.au' - enthält eine Ziffer (' 3') so Dies wird nicht umgeleitet. Wie oben erwähnt, schließt Ihre Regex Ziffern aus. "http: //sample.membes3.com.au/? foo" wird auch nicht umgeleitet, es sollte "http: // sample.membes3.com.au/foo" (kein '?') sein. – MrWhite

+1

Spot on .. das Problem war der numerische Wert in den Domänen! Danke w3dk! – Jason