Seite 1 von 1

Subdomain plus Parameter

Verfasst: 28.11.2009 18:19
von MostWanted82
Hi,
ich würde meine urls gerne suchmaschinenfreundlicher gestalten.
Meine Seite ist so aufgebaut, dass eigentlich immer die index.php aufgerufen wird, der parameter page= gibt an welcher inhalt anzuzeigen ist.

ich würde gerne folgende urls verwenden
pages.domain.de/help/ -> www.domain.de/index.php?page=help

dazu habe ich folgenden mod_rewrite gebastelt

Code: Alles auswählen

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^pages\.domain\.de
RewriteRule ^([^/]*)$ /domain/index.php?page=$1 [NC]
jetzt würde ich gerne eventuell zusätzliche parameter auchnoch verschönern

z.b. eine bisherige url wäre
www.domain.de/index.php?page=locations&id=99&monat=8

jetzt würde ich anstatt dieser url lieber eine in folgender Form verwenden:
pages.domain.de/locations/id_99/monat_8/

wie kann ich die parameter "id_99" bzw beliebige andere in diese urls umwandeln?
also es sollen eine beliebige anzahl von parameter/wert paaren umgewandelt werden und an die url angehängt werden.

Bin für jede Hilfe Dankbar.

P.S. wie sieht die url nach obengenannter Regel aus? gibt es eine möglichkeit mir diese anzuzeigen?

Verfasst: 03.12.2009 19:28
von Gumbo
Das einfachste wäre wohl, wenn du die Anfrage mit PHP parsen würdest (siehe $_SERVER['REQUEST_URI']).

Verfasst: 03.12.2009 20:27
von MostWanted82
Gumbo hat geschrieben:Das einfachste wäre wohl, wenn du die Anfrage mit PHP parsen würdest (siehe $_SERVER['REQUEST_URI']).
Das wäre sicherlich eine möglichkeit, aber ich bin davon ausgegangen, dass mod_rewrite das auch kann, und vermutlich um einiges performanter als PHP dazu in der Lage ist.

Unter http://www.modrewrite.de/foren/ftopic82.html bin ich ja schon auf das Beispiel gestoßen

Punkt 7.5
Ein Aufruf von /index,get1_val1,get2_val2,get3_val3.html ---soll--in--> /index.php?get1=val1&get2=val2&get3=val3 umgewandelt werden:

Code: Alles auswählen

RewriteEngine on
RewriteRule ^([^/,.]+),([^/_]+)_([^/,.]+)([^/.]*)(\.html)?$ $1$4?$2=$3 [QSA,N]
RewriteRule ^([^/.]+)$ /$1.php [L]
hatte versucht diese Regel anzupassen indem ich die "," aus der Regel entfernt habe, aber das hat natürlich nicht zum gewünschten Erfolg geführt.

Meine Regel sah dann so aus:

Code: Alles auswählen

RewriteEngine on
RewriteRule ^([^/.]+)/([^/_]+)_([^/.]+)([^/.]*)(\.html)?$ $1$4?$2=$3 [QSA,N]
RewriteRule ^([^/.]+)$ /$1.php [L]
Was mache ich falsch?

Verfasst: 04.12.2009 08:59
von Gumbo
Da PHP sowieso der Empfänger der Anfrage sein wird, ist macht es wohl keinen Unterschied. PHP ist aber sprachlich weit aus mächtiger als mod_rewrite.

Code: Alles auswählen

RewriteRule ^([^/_.]+)/([^/_]+)_([^/]+)/(.*)$ /$1$4?$2=$3 [QSA,N] 
RewriteRule ^([^/_.]+)/$ $1.php [L]

Verfasst: 04.12.2009 13:34
von MostWanted82
Das hatte leider net so ganz funktioniert, habs jetzt wie folgt gelöst:

.htaccess

Code: Alles auswählen

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.de [NC]
RewriteCond %{REQUEST_URI} ^pages/.*$ [NC,OR]
RewriteCond %{REQUEST_URI} ^locations/.*$ [NC]
RewriteRule .*$ /verzeichnis/index.php [L]
index.php:

Code: Alles auswählen

function url_rewrite()
{
	$request = substr($_SERVER[REDIRECT_URL],1);
	if(substr($request,strlen($request)-5,5)=='.html') $request=substr($request,0,strlen($request)-5);
	
	$parameter = explode('/',$request);
	if($parameter[0]=='pages'){
		$_GET['page']=$parameter[1];
		array_splice($parameter, 0, 2);
	}
	else if($parameter[0]=='locations'){
		$_GET['page']='location';
		array_splice($parameter, 0, 1);
	}
	foreach ($parameter as $value)
	{
		$splits=explode('-',$value,2);
		if(count($splits)==2) $_GET[$splits[0]]=$splits[1];
	}
}
Trotzdem Dnke Gumbo