htaccess um Querystring-Abfrage erweitern.

Gesperrt
timgroth
Beiträge: 42
Registriert: Do 6. Okt 2005, 15:28
Kontaktdaten:

htaccess um Querystring-Abfrage erweitern.

Beitrag von timgroth »

Buenos dias!

Ich habe gerade eine Webseite mit Stese´s ModRewrite-Version online gestelt. Es läuft auch alles einwandfrei. Nun sind neben der Hauptdomain aber noch weitere Domains auf den Speicherplatz des CMS aufgeschaltet.

Nun lese ich über die index.php wie folgt die aktuelle Domain aus und will eigentlich, dass entsprechend des Domainnamens die Sprachversion aufgerufen wird.

Code: Alles auswählen

<?php
if(!stristr($_SERVER["HTTP_HOST"],"domain.de"))
	{
	header("Location: http://www.domain.de/?changelang=3");
	exit();
	}

@include_once ('contenido/includes/config.php');

// path settings
$str_fullpath = substr_replace ($cfg['path']['contenido_fullhtml'], "", -10); 


if (isset($cfg['mod_rewrite']['use'])) {

	// modrewrite aktiviert
	if ($cfg['mod_rewrite']['use'] == 1) {
	   
	   
		header("Location: " . $str_fullpath);
	} else {
		// mod rewrite deaktiviert
		header("Location: " . $str_fullpath . "cms/front_content.php");
	}


} else {
	// kein mod rewrite
	header("Location: " . $str_fullpath . "cms/front_content.php");
}
?>

Leider scheint dabei aber die Changelang-Anweisung von der htaccess-Datei ignoriert zu werden :-/

Code: Alles auswählen

#AddHandler php-cgi .php .php4
Options All +FollowSymLinks +SymLinksIfOwnerMatch -Indexes

<IfModule mod_rewrite.c>
RewriteEngine on

# achtung bitte basisverzeichnis anpassen!
RewriteBase /cms


# ausnahmen für verzeichnisse der mod_rewrite regel:
# verzeichnisse ausschließen
RewriteRule ^usage/.*$ - [L]

# das kann beliebig erweitert werden:
# RewriteRule ^verzeichnis1/.*$ - [L]
# RewriteRule ^verzeichnis2/.*$ - [L]
# RewriteRule ^verzeichnis3/.*$ - [L]
# RewriteRule ^verzeichnis4/.*$ - [L]



RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/(.*).html$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3&parts[]=$4&parts[]=$5&parts[]=$6&parts[]=$7&parts[]=$8&artname=$9 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3&parts[]=$4&parts[]=$5&parts[]=$6&parts[]=$7&parts[]=$8 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/(.*).html$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3&parts[]=$4&parts[]=$5&parts[]=$6&parts[]=$7&artname=$8 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3&parts[]=$4&parts[]=$5&parts[]=$6&parts[]=$7 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/(.*).html$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3&parts[]=$4&parts[]=$5&parts[]=$6&artname=$7 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3&parts[]=$4&parts[]=$5&parts[]=$6 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/(.*).html$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3&parts[]=$4&parts[]=$5&artname=$6 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3&parts[]=$4&parts[]=$5 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/(.*).html$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3&parts[]=$4&artname=$5 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3&parts[]=$4 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/(.*).html$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3&artname=$4 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ front_content.php?parts[]=$1&parts[]=$2&parts[]=$3 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/(.*).html$ front_content.php?parts[]=$1&parts[]=$2&artname=$3 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/$ front_content.php?parts[]=$1&parts[]=$2 [QSA,L]
RewriteRule ^([^/]+)/(.*).html$ front_content.php?parts[]=$1&artname=$2 [QSA,L]
RewriteRule ^([^/]+)/$ front_content.php?parts[]=$1 [QSA,L]
RewriteRule ^(.*).html$ front_content.php?artname=$1 [QSA,L]
RewriteRule ^$ front_content.php [QSA,L]
</IfModule>
Es wäre nett, wenn mir jemand, der sich mit htaccess auskennt, weiterhelfen könnte.

Herzlichen Dank und sonnige Grüße!
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

normal nicht. changelang wird eigentlich übernommen wenn sie gesetzt ist. in der htaccess gibt es den [QSA,L] schalter hinter jeder rule, die sagt, dass evtl. parameter übergeben werden (QSA = query string append)

wird aber deine index.php überhaupt ausgeführt? das ist nämlich nur der fall, wenn in diesem verzeichnis kein .htaccess vorhanden ist. sollte eigentlich schon klappen, wenn du die letzte rule auskommentierst
timgroth
Beiträge: 42
Registriert: Do 6. Okt 2005, 15:28
Kontaktdaten:

Beitrag von timgroth »

Vielen Dank schon einmal für die schnelle Hilfe!

Wenn ich die letzte Rule auskommentiere, lädt sich die Seite immer wieder selbst, so dass Firefox irgendwann mit der Meldung "Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann." abbricht. Gibt es über die htaccess-Datei die Möglichkeit, auszulesen, welche Domain gerade aufgerufen wird und entsprechend die Seite mit changelang aufzurufen?

Ich hätte es gerne so, dass beim Aufruf der Seite "weltaidstag.de" die deutsche Version (also ohne changelang) aufgerufen wird und beim Aufruf von weltaidstag.eu und den anderen Domains die aufgeschaltet sind, die englische Sprachversion (also quasi weltaidstag.de/?changelang=3) aufgerufen wird.

Sonnige Grüße aus dem Norden.
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

prinzipiell sollte es möglich sein, das nur in der htaccess geregelt zu bekommen.

wenn das nicht klappt, suche mal bei modrewrite.de in deren forum - die sind die experten für rewrite rules.

Code: Alles auswählen

... anderes ...
RewriteRule ^(.*).html$ front_content.php?artname=$1 [QSA,L]
# RewriteRule ^$ front_content.php [QSA,L]
# suche nach der .de domain
RewriteCond %{HTTP_HOST} domain\.de
RewriteRule ^$ front_content.php?changelang=1 [QSA,L]
# alle anderen 
RewriteRule ^$ front_content.php?changelang=2 [QSA,L]
</IfModule>
also die letzte zeile auskommentiert und statt dessen die condition für die de domain reinsetzen, sonst den parameter changelang=2 festsetzen
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

ach und wenn das auch nicht hilft, nimm die ursprüngliche .htaccess und setze deine domainabfrage in die config.php des mandanten und setze dort die variable $load_lang neu ... das geht auch ;)
timgroth
Beiträge: 42
Registriert: Do 6. Okt 2005, 15:28
Kontaktdaten:

Beitrag von timgroth »

Das mit dem $load_lang war eine klasse Idee!
Ich Frage jetzt über die Mandanten-Config folgendes ab:


if(strstr($_SERVER["HTTP_HOST"],".eu") && strstr($_SERVER["HTTP_X_FORWARDED_HOST"],".de"))
{
$load_lang = "1";
}
if(strstr($_SERVER["HTTP_HOST"],".eu") && strstr($_SERVER["HTTP_X_FORWARDED_HOST"],".com"))
{
$load_lang = "3";
}
if(strstr($_SERVER["HTTP_HOST"],".eu") && !$_SERVER["HTTP_X_FORWARDED_HOST"])
{
$load_lang = "4";
}


Das klappt soweit auch wunderbar.
(siehe weltaidstag.de, weltaidstag.eu, weltaidstag.com)

Das Problem, welches nun leider auftaucht ist, dass mir zwar die weltaidstag.eu und weltaidstag.com in den gewünschten Sprachen ausgegeben werden,
aber sobald ich auf einen Link in der Navigation klicke, er auf die weltaidstag.de springt, da diese ja als Hauptdomain in Contenido angegeben wurde :-(

Kann ich die Web-Addresse des Mandanten nicht irgendwie anhand der aktuellen Domain festmachen?
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

jap siehe changelog (ja da stehen mitunter lustige sachen drinnen ;)) der installationsdatei: http://contenido.org/forum/viewtopic.php?p=68877#68877
timgroth
Beiträge: 42
Registriert: Do 6. Okt 2005, 15:28
Kontaktdaten:

Beitrag von timgroth »

Stese, ich habe jetzt in der front_content.php folgenden String ausgetauscht..

$str_new_htmlpath = $cfgClient[$client]["path"]["htmlpath"];

..gegen..

if(strstr($_SERVER["HTTP_HOST"],".eu") && strstr($_SERVER["HTTP_X_FORWARDED_HOST"],".de"))
{
$str_new_htmlpath = "http://www.weltaidstag.de/cms/";
}
if(strstr($_SERVER["HTTP_HOST"],".eu") && strstr($_SERVER["HTTP_X_FORWARDED_HOST"],".com"))
{
$str_new_htmlpath = "http://www.weltaidstag.com/cms/";
}
if(strstr($_SERVER["HTTP_HOST"],".eu") && !$_SERVER["HTTP_X_FORWARDED_HOST"])
{
$str_new_htmlpath = "http://www.weltaidstag.eu/cms/";
}

..und es klappt :-)
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

nein, es gibt eine elegantere variante - bitte post oben drüber lesen
Gesperrt