mod_rewrite + wildcard + Subdomains
Hallo
einfache mod_rewrite-Anweisungen konnte ich bisher immer selbst erstellen. Jedoch breche ich mir bei dieser Sache die Ohren. Ich habe eine domain mit wildcard-Subdomains Beispiel www.domain.de Subdomain, die läuft: main.db.domain.de Das "main" kann ich beliebig tauschen oder erweitern - funzt immer: Beispiele: de.db.domain.de funzt! cn.db.domain.de funzt! en.db.domain.de funzt! p.123.de.domain.de funzt! f.123.de.domain.de funzt! ... Dort habe ich ein Datenbankscript (script.php) laufen, welches folgende Parameter erwartet: lang (Sprache) id_art (p/f) id (eine ID) Wenn jemand folgende url eingibt, hätte ich gern, daß sich die url im Browser "nicht" ändert, aber das script "script.php" aufgerufen wird. Also jemand gibt z.B. ein: Beispiel1: p.123.de.domain.de Dabei soll das Script "script.php" aufgerufen werden und die Angaben aus der url ausgewertet werden können. also: script.php?id_art=p&id=123&lang=de Beispiel2: f.456.cn.domain.de Dabei soll das Script "script.php" aufgerufen werden und die Angaben aus der url ausgewertet werden können. also: script.php?id_art=f&id=456&lang=cn Hier weiß ich nicht einmal ansatzweise, wie ich mod_rewrite in der .htacess einrichte. Vielleicht kann mir jemand einen "Schubser" in die richtige Richtung geben. Vielen Dank schon jetzt! |
AW: mod_rewrite + wildcard + Subdomains
Zeige sicherheitshalber noch mal Deinen Virtualhosteintrag.
Dein Vorhaben wäre mit PHP bequemer umzusetzen: PHP-Code:
PHP-Code:
btw: verwende zur Erklärung immer *.example.com oder *.example.net. Die Domains existieren und dienen als Beispieldomains, wenn jemand was erklären möchte. domain.de gehört einer Firma: Code:
Domain: domain.de |
AW: mod_rewrite + wildcard + Subdomains
Vielen Dank!
Ja - daran dachte ich auch schon - möchte aber nicht, daß eine Umleitung mit den Parametern sichtbar ist und es für die Suchmaschinen so aussieht - insbes. Baidu - daß es sich um die Rootdatei handelt. Mir ist aufgefallen, daß Baidu Rootseiten und Rootseiten von Subdomains indexieren. Unterseiten dagegen nicht oder halt nur, wenn sich der Server auf dem chinesischen Festland befindet. Was meinst Du mit "Zeige sicherheitshalber noch mal Deinen Virtualhosteintrag."? Ich betreibe einen Virtual Server Managed 5.0 L bei Hosteurope |
AW: mod_rewrite + wildcard + Subdomains
Zitat:
PHP-Code:
Zitat:
Code:
<virtualhost 1.2.3.4:80> Zitat:
vhost.conf erzeugen bzw. editieren und Code:
/usr/local/psa/admin/bin/httpdmng --reconfigure-domain example.com |
AW: mod_rewrite + wildcard + Subdomains
OK - Vielen Dank,
habe es nun so gelöst: htaccess: RewriteEngine On RewriteCond %{HTTP_HOST} !^main.db.domain.de$ [NC] RewriteCond %{REQUEST_URI} !^/(css|js|images)(/.*)? RewriteRule ^ script.php [QSA,L] 1. Rewrite anschalten 2. betrifft nicht main.db.domain.de 3. betrifft nicht Dateien, die sich in den Ordnern "css", "js", "images" befinden 4. Weiterleitung zum Script: script.php Dort werte ich mittels PHP $_SERVER["HTTP_HOST"] aus und verhindere ungültige und ungewollte Aufrufe. $_SERVER["HTTP_HOST"] zeigt mir z.B.: http://f12345.cn.db.domain.de/ Für alle, die es interessiert: PHP: // Weiterleitung falls hier nicht erwünscht function wech_hier(){ $url_neu = "http://main.db.domain.de"; //falls umgeleitet wird header ('HTTP/1.1 301 Moved Permanently'); header ("Location: ".$url_neu); exit(); } // die ID ohne "p" oder "f" als Array übergeben // Für jede einzelne Ziffer wird geprüft, ob es eine Zahl ist. function is_numeric_array($array) { foreach ($array as $key => $value) { if (!is_numeric($value)) return false; } return true; } // Punkte in der Domain zählen $anz_punkt = substr_count($_SERVER["HTTP_HOST"], "."); //anzahl punkt $teile = explode(".", $_SERVER["HTTP_HOST"]); $ai = $teile[0]; $la = $teile[1]; $sd = $teile[2]; $hd = $teile[3]; $su = $teile[4]; // Url falsche eingegeben oder damit rumgespielt // Bei dieser Konfiguration darf der Aufruf nur 4 Punkte enthalten --> ansonsten ungültig --> Weiterleitung if ($anz_punkt == "4"){ } else{ wech_hier(); //irgendwas stimmt mit der url nicht Punkte nicht = 4 } // Kein Teil zwischen den Punkten darf leer sein --> ansonsten ungültig --> Weiterleitung if (($ai == "")||($la == "")||($sd == "")||($hd == "")||($su == "")){ wech_hier(); // irgendein Teil ist leer! } else{} // Die einzelnen Inhalte der URL werden auf gültige Werte geprüft if ($su == "de"){ } else { wech_hier(); // su != "de" } if ($hd == "domain"){ } else { wech_hier(); // hd != "domain" } if ($sd == "db"){ } else { wech_hier(); // sd != "db" } if (($la == "de")||($la == "cn")){ } else { wech_hier(); // la nicht erlaubt } //Trennen von "p" oder "f" von ID $id = substr($ai, 1); //Übergabe von ID als Array an funktion $id_array = array(); for($i=0; $i<strlen($id); $i++){ $id_array[] = $id{$i}; } //Übergabe von ID als Array an Funktion und Auswertung if (is_numeric_array($id_array)) { } else { wech_hier(); // id ist keine Zahl } So - das funktioniert bei mir. Nochmal Vielen Dank für die Hilfe und Tipps. Weiß jetzt nicht, wie man diesen Beitrag als beendet deklariert. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 18:44:39 Uhr. |
Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.