• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP to htaccess

sero

New member
Geschätzte Community

Ich möchte seit längerem eine Weiterleitung aus PHP im .htaccess File einbauen.
Leider gelingt es mir überhaupt nicht.

Der funktionierende PHP Code lautet:
PHP:
if( strpos($_SERVER['HTTP_HOST'], "www.hallo") === false ){
	$lk =  array_reverse(explode(".", $_SERVER['HTTP_HOST']));
	header("Location: http://www.hallo.".$lk[0].$_SERVER['REQUEST_URI'],TRUE,301);
  	exit();	
}

Wenn die Domain nicht www.hallo lautet, so soll auf die Domain www.hallo umgeleitet werden.
Jedoch soll die Landeskennung beibehalten werden.

BSP:
http://www.welt.de => http://www.hallo.de umleiten
http://hallo.de => http://www.hallo.de umleiten
http://www.hallo.de muss nicht umgeleitet werden

Da es sehr viele Domains mir vielen Landeskennungen sind kann ich nicht einfach alle abfragen so quasi wie ein switsch machen.

Es soll als die $lk = array_reverse(explode(".", $_SERVER['HTTP_HOST'])); im .htaccess eingebaut werden.

Für Vorschläge und Hinweise bin ich sehr dankbar
Mit besten Grüssen aus Zürich
Roger
 
Hi,

also PHP läuft nicht in einer .htaccess-Datei. Das geht also gar nicht.

Das Umleiten der URL ohne www geht wie folgt:

Code:
RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\.hallo\.de$
RewriteRule ^(.*)$ http://www.hallo.de/$1 [L,R=301]

Und beim Umleiten einer Domain auf eine andere müsste folgendes noch darunter ergänzt werden:

Code:
RewriteCond %{HTTP_HOST} ^www\.alte-domain\.de$
RewriteRule ^(.*)$ http://www.neue-domain.de$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^alte-domain\.de$
RewriteRule ^(.*)$ http://www.neue-domain.de$1 [L,R=301]
Damit müsste das realisiert werden, was Du gefragt hattest.

CU

Frank-Andre
 
Hi Frank-Andre

Ganz herzlichen Dank für deine Antwort.
Mein grösstes Problem ist es eigentlich, die Landeskennung mit rein zu kriegen.
Denn es sind sehr viele Domains: (.com .de .at .ch .eu .co.uk .asia .net .org .cc .us und weitere)
Dann habe ich drei Second-Level Domains: hallo - hallo1 - und hallo2

Alle www.hallo.com .de .at .ch .eu .co.uk .asia .net .org .cc .us usw da soll nix passieren
Alle hallo.com .de .at .ch .eu .co.uk .asia .net .org .cc .us usw. sollen auf www.hallo.com .de .at .ch .eu .co.uk .asia .net .org .cc .us usw.
allso .com auf .com | .de auf .de usw...

Alle www.hallo1.com .de .at .ch .eu .co.uk .asia .net .org .cc .us usw sollen auf www.hallo.com .de .at .ch .eu .co.uk .asia .net .org .cc .us usw.
Alle hallo1.com .de .at .ch .eu .co.uk .asia .net .org .cc .us usw. sollen auf www.hallo.com .de .at .ch .eu .co.uk .asia .net .org .cc .us usw.
allso .com auf .com | .de auf .de usw...

Alle www.hallo2.com .de .at .ch .eu .co.uk .asia .net .org .cc .us usw sollen auf www.hallo.com .de .at .ch .eu .co.uk .asia .net .org .cc .us usw.
Alle hallo2.com .de .at .ch .eu .co.uk .asia .net .org .cc .us usw. sollen auf www.hallo.com .de .at .ch .eu .co.uk .asia .net .org .cc .us usw.
allso .com auf .com | .de auf .de usw...

Zusammengefasst: Alle Domains sollen auf www.hallo.landeskennung weitergeleitet werden.
hallo1 und hallo2 sind verschiedene schreibweisen von hallo und sollen deshalb weitergeleitet werden...

Für einen Weiteren Vorschlag bin ich sehr Dankbar
Beste Grüsse aus Zürich
Roger
 
nun, bleiben wir doch konstruktiv...
jeder hat doch seine Stärken und Schwächen...
Ich bin nun mal nicht der Hirsch was reguläre Ausdrücke angeht...

Aber Stasi-albu, wenn es so einfach ist, die Landeskennung an die weitergeleitete Domain anzuhängen warum verrätst du es denn nicht.
Was nützt dir dein Wissen wenn niemand weis was du weist?
konstruktive Grüsse
Roger
 
Soweit ich das verstehe kannst du das was du willst, normalerweise bei deinem Hoster im Backend einstellen, dazu brauchst du doch kein .htaccess oder PHP Skript.
 
Habe das gerade gechecket.
Ich kann leider keine Weiterleitungen im Backend des Hosters einstellen...

Aber danke für den Input...
 
Ich nutze Hostpoint. Es ist eigentlich kein BilligHoster
Ich kann die Domains nur mit einem Verzeichniss verbinden...
Weiterleiten kann ich die Domains leider nicht im Backend

Aber es wäre natürlich die elaganteste Lösung...
 
[1. Antwort gestrichen - da falsch gelesen.]

2. Antwort, warum fragst du dann nicht mal beim Hoster nach ob das geht?
 
Zuletzt bearbeitet:
Das Thema Multidomains mit unterschiedlichen TLD ist aber nicht unkritisch - siehe http://technicalinfo.net/papers/HostNamingAndURLs.html

Zum Thema Umleitung - ich bin aber nicht sicher, ob das wirklich geht, so gut sind meine Kentnisse auch nicht - versuche mal folgendes:

Code:
Options +FollowSymLinks

RewriteEngine On

RewriteCond %{HTTP_HOST} ^([a-z0-9]\.(de|at|ch|eu|co.uk|asia|net|org|cc|us))$ [NC]
RewriteRule ^(.*)$ http://www.hallo/$1 [R=301,L]
Du musst die TLD in der Klammer natürlich um alles erweitern, was Du an TLDs besitzt.

CU

Frank-Andre
 
@ ein schlauer
in der URL von Hostpoint gings nur um eMail Weiterleitungen...
Habe aber das Backend nochmals durchforstet und keine Weiterleitung gefunden.

Nun habe ich ein Ticket an den Support geschrieben...
Ich bleibe am Ball mit der Idee, aber denke der Hoster bietet es nicht an.
Herzlichen Dank für den wertvollen Input @ein schlauer
 
@Thies
Hallo Frank-Andre

Die URL's in einem Pattern angeben ist natürlich klever...
Studiere gerade deinen Angegebenen Link welcher sehr aufschlussreich ist und werde dann in der Nacht mal deinen Code ausprobieren
Ich bleibe am Ball.
Herzlichen Dank Frank-Andre
 
Zuletzt bearbeitet:
@Thies
Hallo Frank-Andre

ich habe das ganze mal durchgetestet.
Leider funktioniert es noch nicht richtig.

aber einen Schritt weiter sind wir.
Habe den Code folgendermassen abgeändert:

PHP:
HcgiPhpProfileName php5 test
##Options +FollowSymLinks  ##funktioniert nicht wenn es berücksichtigt wird
RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www\.hallo\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info))$
RewriteRule ^(.*)$ http://www.hallo/$1 [R=301,L]

Für den Fall www.hallo.com usw. funktioniert es, klaro.

Aber für alle anderen Fälle wird auf:
www.hallo
ohne Landeskennung Weitergeleitet...


Funktioniert also noch nicht.

Wenn jemand eine Idee hat, ich bin froh darüber...

Grüsse
Roger
 
Zuletzt bearbeitet:
Stimmt, kann auch gar nicht funktionieren, weil das Mist ist, was ich geschrieben habe :icon8: Sorry!!!

Bauen wir das nochmal logisch auf. Folgende Regel hatte ich mir mal notiert für das Umrouten von multiplen TLDs ohne www zu Beginn (angepasst auf Deine TLDs):

Code:
RewriteCond %{HTTP_HOST} ^([-0-9a-z]*\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info))$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
In der Variablen %1 steht jetzt aber die Domain inkl. der TLD, womit wir das Umrouten von hallo1 und hallo2 nicht in den Griff bekommen. Also muss man Domain-Name und TLD getrennt übergeben. Das müsste wie folgt gehen:

Code:
RewriteCond %{HTTP_HOST} ^([-0-9a-z]*)\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$ [NC]
RewriteRule ^(.*)$ http://www.%1.%2/$1 [R=301,L]
Jetzt können wir aus %1 den Domain-Namen hallo machen, womit alle Aufrufe ohne www zu Beginn und egal welcher Domain-Name genutzt wurde, mit der passenden TLD umgeroutet werden:

Code:
RewriteCond %{HTTP_HOST} ^([-0-9a-z]*)\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$ [NC]
RewriteRule ^(.*)$ http://www.hallo.%2/$1 [R=301,L]
Das Problem ist nur, dass damit nicht die Aufrufe von www.hallo1.tld und www.hallo2.tld umgeroutet werden. Also brauchen wir eine weitere Regel:

Code:
RewriteCond %{HTTP_HOST} !^www\.hallo\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$ [NC]
RewriteRule ^(.*)$ http://www.hallo.%1/$1 [R=301,L]
Also zusammengenommen:

Code:
RewriteEngine On

RewriteCond %{HTTP_HOST} ^([-0-9a-z]*)\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$ [NC]
RewriteRule ^(.*)$ http://www.hallo.%2/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !^www\.hallo\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$ [NC]
RewriteRule ^(.*)$ http://www.hallo.%1/$1 [R=301,L]
Ich kann das aber aktuell nicht testen, daher verspreche ich nicht, dass es wirklich so geht ....

CU

Frank-Andre

P.S. Ich habe mir gerade überlegt,dass eventuell sogar nur der 2. Teil der Regeln erforderlich ist, um bereits zur Lösung zu kommen. Probiere das bitte am besten mal zuerst aus.
 
Zuletzt bearbeitet:
Geschätzter Frank-Andre

ganz herzlichen Dank für deine grosse Arbeit.

Ich habe alles gleich ausprobiert. Leider funktioniert der Vierzeiler den du am Schluss vorschlägst nicht.

Daher Habe ich die einzelnen Codes ausprobiert:
PHP:
RewriteCond %{HTTP_HOST} ^([-0-9a-z]*)\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$ [NC]
RewriteRule ^(.*)$ http://www.hallo.%2/$1 [R=301,L]
Diese Abfrage funktioniert wunderbar.
Im %1 steht hallo oder hallo1
Im %2 steht die Landeskennung.

Der zweite Teil funktioniert noch nicht:
PHP:
RewriteCond %{HTTP_HOST} !^www\.hallo\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$ [NC]
RewriteRule ^(.*)$ http://www.hallo.%1/$1 [R=301,L]
Die Abfrage ist im richtigen Case true.
Doch %1 ist leer. Sowie auch %2, %3

Des witeren habe ich folgendes getestet:
PHP:
RewriteCond %{HTTP_HOST} !^www\.hallo$ [NC]
RewriteRule ^(.*)$ http://www.hallo$1 [R=301,L]
Die Überlegung ist, alles was hinter hallo steht an die Weitergeleitete URL anzuhängen...
Das funktioniert teils:
- www.hallo.at/de/home/? wird zu www.hallode/home/? auch hier fehlt wieder die Landeskennung
- hallo.at/de/home/? wird zu www.hallode/home/? auch hier fehlt wieder die Landeskennung aber das www wird richtig angehängt.

Ein weiterer Test:
PHP:
RewriteCond %{HTTP_HOST} !^www\.hallo\.([a-z]+)$ [NC]
RewriteRule ^(.*)$ http://www.hallo%1/$1 [R=301,L]
Leider ist auch hier %1 ... %3 leer...

Irgendwie fehlt da einfach ein Detail.

Für weitere Inputs bin ich sehr dankbar.
Grüsse Roger
 
Letzte Idee, dann bin ich ratlos: versuche im 2. Teil mal anstelle von:

Code:
RewriteCond %{HTTP_HOST} !^www\.hallo\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$ [NC]
RewriteRule ^(.*)$ http://www.hallo.%1/$1 [R=301,L]

folgenden Part:

Code:
RewriteCond %{HTTP_HOST} ^www\.(hallo1|hallo2)\.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$ [NC]
RewriteRule ^(.*)$ http://www.hallo.%2/$1 [R=301,L]
Vielleicht geht das. Dort wird nun geprüft, ob die alternativen Domains aufgerufen wurden und routen diese dann auf die Hauptdomain um.

CU

Frank-Andre
 
Zuletzt bearbeitet:
Herzlichen Dank Frank-Andre für deinen erneuten Vorschlag.

Erster Vorschlag:
PHP:
RewriteCond %{HTTP_HOST} !^www.hallo.(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$ [NC]
RewriteRule ^(.*)$ http://www.hallo.%1/$1 [R=301,L]
Der richtige Case wird mit true belegt aber %1 ist leider leer.

Zweiter Vorschlag:
PHP:
RewriteCond %{HTTP_HOST} ^www.(hallo1|hallo2).(com|de|at|ch|eu|co.uk|asia|net|org|cc|us|asia|biz|li|mobi|info)$ [NC]
RewriteRule ^(.*)$ http://www.hallo.%2/$1 [R=301,L]
Der richtige Case wird mit true belegt aber %1, %2 Und %3 sind leer.

Ich bin echt der Meinung, dass der zweite Vorschlag funktionieren müsste, da wir keine verneinung drinn haben...

Selber bin ich schon lange am ende mit diesem Problem... und habe wirklich keine Ideen mehr.

Aber andere müssen das Problem doch auch gelöst haben.

Auf jeden Fall bedanke ich mich ganz herzlich den Input und bin offen für neues...
Beste Grüsse
Roger
 
Zurück
Oben