[PHP] Keinen Unterscheid machen mit www oder ohne www

mydoys.de

Well-known member
ID: 84968
L
20 April 2006
2.758
125
Moin ich habe diese Script hier:

Es ein Wenige Kompliziert was ich vorhabe

MEIN CODE :
PHP:
$adresse = StrToLower($_SERVER['HTTP_HOST']); 
$length = strlen($adresse) - strlen($page_domain) - 1; 
$aa_subdomain = substr($adresse, 0, $length); 
$pos = strpos ($aa_subdomain, "www."); 
if (!($pos === false) AND ($pos == 0)) 
{ 
$aa_subdomain = substr($aa_subdomain, 4); 
} 
$split = explode(".", $aa_subdomain); 
$subdomain = ereg_replace("https://", "", $split[0]);

Also ich lasse mir das was das Script macht mit "$subdomain" anzeigen weil diese in der Datenbank steht!

https://tester.meinedomain.de <--- Geht
https://www.tester.meinedomain.de <--- Geht nicht

Ich möchte aber gerne erreichen das beides ohne Probleme geht.
aber wie?
 
Bei explode() wird deine Domain bei jedem . zerlegt, nicht bei dem letzten!
Du kannst dafür preg_split() benutzen. Mit einem einfachen Regulären Ausdruck hast du dann schon deine Lösung.
Nimm also anstatt:
PHP:
$split = explode(".", $aa_subdomain);
folgendes:
PHP:
$split = preg_split("/^(.+)\.[^\.]+\.de$/i", $aa_subdomain);
(nicht getestet)

PS: !($pos === false) ist das gleiche wie: $pos !== false und str_replace() ist meine ich schneller als ereg_replace() in deinem Fall ;) ereg_replace() ist nämlich dafür, wenn man mit Reguläre Ausdrücke etwas ersetzen möchte und str_replace() für ganz normale Strings ;)

@ice-breaker: Ja, doppelte Subdomains in diesem Sinne sind erlaubt ;) Schau dir z.B. die .de.vu Domains an, ich denke, es ist nichts anderes als das vu die Endung ist und de die Domain ;) Was davor kommt ist dann die Subdomain und diese ist auch mit www. ansprechbar. Also www.domain.de.vu geht ja!
Und mein Hoster hat mir zu allererst auch eine Subdomain gegeben (als ich noch keine TLD hatte) und ich konnte trotzdem noch selber Subdomains erstellen.
 
habe mal geändert was du vorgeschlagen hast..

Und es ist was neues dazu gekommen was ich oben vergessen hatte zu schreiben ... :( :-?

PHP:
$adresse = StrToLower($_SERVER['HTTP_HOST']); 
$length = strlen($adresse) - strlen($page_domain) - 1; 
$aa_subdomain = substr($adresse, 0, $length); 
$pos = strpos ($aa_subdomain, "www."); 
if (!($pos !== false) AND ($pos == 0)) 
{ 
$aa_subdomain = substr($aa_subdomain, 4); 
} 
$split = preg_split("/^(.+)\.[^\.]+\.de$/i", $aa_subdomain); 
//$split = explode(".", $aa_subdomain); 
$subdomain = str_replace("https://", "", $split[0]); 

echo"$subdomain";

Jetzt Zeigt er mir : www.tester.meinedomain.d <-- Ohne E !
Edit : und bei ohne WWW zeigt er mir : er.meinedomain.d <-- Ohne E !
Ich benötige aber nur "tester" und als zweites "meinedomain.de"
 
Zuletzt bearbeitet:
Oh, Entschuldigung. Ich habe preg_split() falsch im Kopf gehabt ;)
Nimm mal folgendes Script:

PHP:
$adresse = StrToLower($_SERVER['HTTP_HOST']); 
$length = strlen($adresse) - strlen($page_domain) - 1; 
$aa_subdomain = substr($adresse, 0, $length); 
$pos = strpos ($aa_subdomain, "www."); 
if ($pos !== false AND ($pos == 0)) 
{ 
$aa_subdomain = substr($aa_subdomain, 4); 
} 
preg_match("/^http:\/\/(?:www\.)?(.+)\.([^\.]+\.de)$/i", $aa_subdomain, $domain);

$testing="{$domain[1]}.{$domain[2]}";

echo $testing;
 
Wäre es nicht am einfachsten, jeweils 2 Subdomains anzulegen?
1. tester.domain.de
2. www.tester.domain.de

In meinem Confixx ging des gerade ohne Probleme.
Und ich kann auch ohne Probleme auf beide Domains zugreifen.
 
Was spricht gegen Folgendes:
PHP:
$host_parts = explode('.', $_SERVER['HTTP_HOST']);
if (reset($host_parts)=='www') {
	array_shift($host_parts);
}
$domain = implode('.', array_slice($host_parts, -2, 2));
$subdomain = implode('.', array_slice($host_parts, 0, -2));

echo $domain.' - '.$subdomain;
Damit kannst Du auch noch ausgefallenere Subdomains verwalten.

@chrissel:
... (als ich noch keine TLD hatte) ...
Ich möchte mal behaupten, dass Du immer noch keine Top Level Domain hast... ;)
 
Zuletzt bearbeitet:
Bei explode() wird deine Domain bei jedem . zerlegt, nicht bei dem letzten!
Mit negativen $limit-Parameter (PHP≥5.1) kommst du auch ran. Damit kriegst du dann die komplette Subdomain als Array:
PHP:
$sd_array=explode('.',$_SERVER['HTTP_HOST'],-2);
print_r($sd_array);
echo implode('.',$sd_array);
Mit einem anschließenden implode könnte man dann einfach verschiedene Subdomains mit einem Stringvergleich detektieren.

Code:
www.example.com
=> array(0 => "www")
=> www

subdomain.example.com
=> array(0 => "subdomain")
=> subdomain

www.subdomain.example.com
=> array(0 => "www", 1 => "subdomain")
=> www.subdomain

ganz.wilde.subdomain.example.com
=> array(0 => "ganz", 1 => "wilde", 2 => "subdomain")
=> ganz.wilde.subdomain
(ungetestet)
 
Zuletzt bearbeitet: