PHP: CMS Funktion für mod_rewrite zu langsam
Verfasst: 21.02.2009 22:57
Hallo,
ich komme seit Monaten mit einem Problem nicht weiter:
Ich habe ein CMS und lasse mir meine URLs damit umschreiben.
Bisher sah die Funktion folgendermaßen aus:
Die Funktion hat aber nur Links umgeschrieben, die nicht absolut waren:
<a href=\"file.php?...\">
Sobald die URL mit einem Slash anfing (<a href=\"/file.php?...\">), funktionierte die Funktion nicht mehr.
Oder wenn - z.B. für einen Newsletter - die Domain mit in dem Link war (<a href=\"http://www.example.com/file.php?...\">), funktionierte die Funktion auch nicht mehr.
Ich habe jetzt also versucht, diese Funktion soweit zu ändern, dass alle Links ausser den einer fremden Domain umgeschrieben wurden:
So, das funktioniert so auch. Nur gibt es ein Problem:
Es ist verdammt langsam!!! Die Seiten brauchen jetzt 10x so lange!
Hat jemand einen Vorschlag, wie man das besser lösen kann?
Danke & Grüsse
Florian
ich komme seit Monaten mit einem Problem nicht weiter:
Ich habe ein CMS und lasse mir meine URLs damit umschreiben.
Bisher sah die Funktion folgendermaßen aus:
Code: Alles auswählen
function rewrite_url(&$s)
{
$replace = array(
"'(?<!/)file.php\?name=Test(&|&)op=View(&|&)id=([0-9]*)(\"|\')'" => "test-\\3.html\\4",
"'(?<!/)file.php\?name=Download(&|&)op=View(&|&)id=([0-9]*)(\"|\')'" => "download-\\3.html\\4",
);
$in=array_keys($replace);
$out=array_values($replace);
$s = preg_replace($in, $out, $s);
return $s;
}
Die Funktion hat aber nur Links umgeschrieben, die nicht absolut waren:
<a href=\"file.php?...\">
Sobald die URL mit einem Slash anfing (<a href=\"/file.php?...\">), funktionierte die Funktion nicht mehr.
Oder wenn - z.B. für einen Newsletter - die Domain mit in dem Link war (<a href=\"http://www.example.com/file.php?...\">), funktionierte die Funktion auch nicht mehr.
Ich habe jetzt also versucht, diese Funktion soweit zu ändern, dass alle Links ausser den einer fremden Domain umgeschrieben wurden:
Code: Alles auswählen
function rewrite_url(&$s)
{
$rw = "(?<=href=\"/)|(?<!/)|(?<= example.com/)|(?<= example.de/)";
$replace = array(
"'($rw)file.php\?name=Test(&|&)op=View(&|&)id=([0-9]*)(\"|\')'" => "test-\\4.html\\5",
"'($rw)file.php\?name=Download(&|&)op=View(&|&)id=([0-9]*)(\"|\')'" => "download-\\4.html\\5",
);
$in=array_keys($replace);
$out=array_values($replace);
$s = preg_replace($in, $out, $s);
return $s;
}
So, das funktioniert so auch. Nur gibt es ein Problem:
Es ist verdammt langsam!!! Die Seiten brauchen jetzt 10x so lange!
Hat jemand einen Vorschlag, wie man das besser lösen kann?
Danke & Grüsse
Florian