Sprechende URLs

ben78

Mitglied
Hi Leutz,

wie generiere ich sprechende Url's?

Hier mal mein Ansatz
.htaccess:
Code:
RewriteRule ^unterseite/(.*)/(.*)/(.*).html$ /unterseite.html?wert1=$1&wert2=$2&wert3=$3 [QSA]

Ausgangs-Link:
PHP:
	 $link_string_blaettern = "<a href=\"$pfad?param1=$wert1&param2=$wert2&param3=$wert3";
							if(isset($_GET['sortieren'])) $link_string_blaettern .= "&sortieren=".$_GET["sortieren"];
							if(isset($_GET['asc'])) $link_string .= "&asc";
							elseif(isset($_GET['desc'])) $link_string .="&desc";
	  $link_string_blaettern .= "\" title=\"Vor\"><font class=\"no_bg\"> &raquo;&raquo;</font></a> \n";
Hier funktioniert das Skript einwandfrei...Aber die Url's beim klicken auf die Sortierfunktion oder Blätterfunktion schauen dann in etwa so aus:
Code:
domain.de/unterseite.html?param1=wert$1&param2=wert$2...usw.

Ich will aber folgenden Aufbau der Url:
Code:
domain.de/unterseite/wert/wert.html

...und damit mir das gelingt, habe ich folgendes Probiert:
PHP:
	 $link_string_blaettern = "<a href=\"$pfad/$wert1/$wert2/$wert3";
							if(isset($_GET['sortieren'])) $link_string_blaettern .= "&sortieren=".$_GET["sortieren"];
							if(isset($_GET['asc'])) $link_string .= "&asc";
							elseif(isset($_GET['desc'])) $link_string .="&desc";
	  $link_string_blaettern .= "\" title=\"Vor\"><font class=\"no_bg\"> &raquo;&raquo;</font></a> \n";

Der Link wird wie gewünscht dargestellt, nur gibt's hier folgendes Problem...und zwar funktioniert dann aber so meine Blätterfunktion nicht mehr. Und wenn z. B. Parameter2 nicht gegeben ist, dann erscheint ein doppelslash und bevor ich's vergesse...die URL wird wie folgt angezeigt: unterseit.html/wert1/wert2/wert3...Oh Maaaaaaaan.....:confused:
 
Zuletzt bearbeitet:
Hi,

dieses Problem kannst du nicht alleine über RewriteRules lösen.
Als erstes sollte deine RewriteRule alle Parameter in einen eigenen URL-Parameter packen:
Code:
RewriteRule ^/unterseite/(.*).html$ /unterseite.html?query=$1 [QSA,L]

Im zweiten Schritt musst du im PHP Code den URL-Paramter "query" Parsen und dort die ganzen Informationen rausholen. Dieser Parser könnte wie folgt aussehen:
PHP:
<?php
class Request
{
    private $params = array();
    
    public function __construct()
    {
        $this->parseQueryString($_REQUEST['query']);
    }
    
    private function parseQueryString($queryString, $keyPrefix = 'wert')
    {
        $queryElements = explode('/', $queryString);
        foreach ($queryElements as $key => $value) {
            $this->params[$keyPrefix . ($key + 1)] = $value;
        }
    }
    
    public function getParam($paramName, $defaultValue = null)
    {
        if (!isset($this->params[$paramName])) {
            return $defaultValue;
        }
        
        return $this->params[$paramName];
    }
}

Gruß Kyoya Stefan
 
AHHHH...Endlich ne Antwort...Schonmal vielen Dank an der Stelle für die ersteHilfestellung

Noch ne Frage zu folgender Zeile:
PHP:
private $params = array();
Muss ich an Stelle von $params die einzelnen ParameterVars eingeben. Also so in etwa:
PHP:
$wert1 $wert2 $wert3 = array();
****?
 
Ich hab jetzt mal den gesamten Code so übernommen, wie er da steht. Aber es tut sich nichts. Das Skript läuft einwandfrei. Aber die dabei generierten URL's sind nach wie vor die selben. In meinem Link (siehe weiter oben) kommt die Variable "$pfad" vor. Diese ist wie folgt definiert:
PHP:
$pfad = $_SERVER['PHP_SELF'];
 
Zurück