tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
675
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ben78 ben78 ist offline Mitglied Bronze
    Registriert seit
    Jan 2010
    Beiträge
    34
    Hi Leute,

    ich will meine LInkstruktur umbauen. Dazu habe ich folgenden Ansatz aufgearbeitet:
    PHP-Code:
        //VARS
        
    $path_parts pathinfo($_SERVER['PHP_SELF']); 
        
    $pfadangabe $path_parts['dirname']."/".$path_parts['filename'];

        
    //LINK
        
    <a href=\"".htmlspecialchars($pfadangabe"/".$var1."/".$var2."/".$var3)"; 
    Hierzu meine .htaccess
    Code :
    1
    
        RewriteRule ^unterseite/(.*)/(.*)/(.*).html$ /unterseite.html?param1=$1t&param2=$2&param3=$3 [QSA]

    Dabei entstehen folgende 2 Probleme:
    1. Problem
    Die URL wird wie folgt ohne DOMAIN.DE angezeigt
    Code :
    1
    
        http://unterseite/$var1//$var3.html
    Ich schließe daraus, dass irgendwo hier der Fehler liegen muss:
    PHP-Code:
        $path_parts pathinfo($_SERVER['PHP_SELF']); 
        
    $pfadangabe $path_parts['dirname']."/".$path_parts['filename'];//=>HIER MUSS DER FEHLER LIEGEN 
    2. Problem
    Wenn eine $var nicht gegeben ist, dann entstehen in der URL doppelslashes wie z. B.:
    Code :
    1
    
    unterseite/$var1//$var3.html)

    Dieses Problem habe ich mittels If-Anweisung lösen können. Also so in etwa:
    PHP-Code:
    $slashes_1 ="/";
    $slashes_2 "/";

    if ( 
    $var1=='' $slashes_1='';
    if ( 
    $var2=='' $slashes_2=''
    So verschwinden jetzt wenigstens die Doppelslashes...
    Aber meine Frage an der Stelle lautet, ob das rein technisch überhaupt der richtige Ansatz ist****?

    FAZIT:
    Ich bin mir Sicher, dass der Schweinehund irgendwo in der .htaccess und in der Variable "$pfadangabe" zu finden ist...

    Jemand ne Ahnung, der weiterhelfen kann****?
     

  2. #2
    Avatar von the snake II
    the snake II the snake II ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Ort
    Krefeld
    Beiträge
    132
    Ich habe nicht richtig verstanden, was du überhaupt erreichen willst.

    Ich kenn dieses Routing nur so, dass man eine index.php hat, auf die man alle Anfragen umleitet und den eigentlich eingegebenen Pfad als query-string übergibt. So deutet deine .htaccess das ja auch an.
    Diese zentrale index.php interpretiert den query-string und included dann vereinfacht gesagt die gewünschte Unterseite.

    Bitte erkläre doch nochmal genauer, was du vor hast. Ich kann auch nicht genau erkennen, in welchem kontext dein Code steht.

    Aber wenn ich dich zumindest soweit richtig verstanden habe, dann ist mir dein Einsatz von pathinfo() nicht klar. pathinfo zerlegt einen String in bestimmte einzelne Teile.
    Und zwar Ordner-Pfandangaben und nicht URLs.

    Wenn Du eine URL in einzelne Teile zerlegen möchtest, würde ich parse_url empfehlen.

    Außerdem von php.net:
    $_SERVER['PHP_SELF']
    Der Dateiname des aktuell ausgeführten Skripts, relativ zum Document Root. Beispielsweise enthält $_SERVER['PHP_SELF'] in einem Skript, das über die Adresse http://example.com/test.php/foo.bar aufgerufen wird, den Wert /test.php/foo.bar/.
    Dass also die Domain mit Suffix nicht in der $pfadangabe drin ist, hat also IMHO drei Gründe:
    1. $_SERVER['PHP_SELF'] enthält diese Angabe schon nicht
    2. pathinfo ist für Ordner-Pfade und nicht für URLs gedacht
    3. Selbst wenn, bei der Zusammensetzung der $pfadangabe würde dieser Teil eh nicht berücksichtigt
     

  3. #3
    ben78 ben78 ist offline Mitglied Bronze
    Registriert seit
    Jan 2010
    Beiträge
    34
    Hey...Du hast mich genau richtig verstanden. Die Variante mit der index.php ist genau die, welche ich will. Ich poste gleich mehr Code für den Überblick...
     

  4. #4
    ben78 ben78 ist offline Mitglied Bronze
    Registriert seit
    Jan 2010
    Beiträge
    34
    Hier mal der Code bis zur Abfrage****?
    PHP-Code:
    if(isset($_GET['param1'])){ 
        
    $params explode("_"$_GET['param1']); 
        
    $param1 $params[0]; 
        if(
    $params[1] != "" && $params[1] != "asc" && $params[1] != "desc"){ 
            
    $param4 $params[1]; 
        } 
         
        if(
    $params[1] == "asc" || $params[2] == "asc"){ 
            
    // Ascending 
        
    } else { 
            
    // Descending 
        



    $var1 = (empty($var1) AND isset($param1)) ? trim($param1) : 'Wert,Wert,Wert...'
    $var2 = (empty($var2) AND isset($_GET['param2'])) ? trim($_GET['param2']) : ''



    $var1 = (isset($_POST['param1']) AND $_POST['param1'] != 'irgendwas') ? trim($_POST['param1']) : $var1
    $var2 = isset($_POST['param2']) ? trim($_POST['param2']) : $var2

    $path_parts pathinfo($_SERVER['PHP_SELF']); 
    $var3 $path_parts['dirname']."/".$path_parts['filename']; 




    //ABFRAGE...SELECT...etc. 
    Und hier der Link.
    PHP-Code:
    $var15 "<a href=\"".htmlspecialchars($pfadangabe."./".$VAR1."/".$VAR2."/".$VAR3)."; 
                                if(isset(
    $_GET['param4'])) $var15 .= "_".$_GET["param4"]
                                if(isset(
    $_GET['param5'])) $var15 .= "_asc"; 
                                elseif(isset(
    $_GET['param6'])) $var15 .="_desc"; 
         
    $var15 .= ".html\" title=\"Vor\"><font class=\"no_bg\"> &raquo;&raquo;</font></a> \n"
         
    $var10[] = $var15
    Ich würde gerne wissen wie ich es zustande bringen kann, dass alle Anfragen auf die index.php umgeleitet werden...Handelt es sich hierbei um einen 301er in der .htaccess****?...ich glaube mal nicht oder?
     

  5. #5
    Kyôya Kyôya ist offline Mitglied Silber
    Registriert seit
    Nov 2011
    Ort
    Würzburg
    Beiträge
    62
    Hi,

    das "Umleiten" geschieht über mod_rewrite (im Apache).
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    RewriteEngine On
     
    # Bedingung: Die angeforderte Datei befindet sich im Dateisystem:
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
     
    # Wenn Bedingung erfüllt, dann nicht umschreiben und Datei ausliefern.
    RewriteRule ^.*$ - [NC,L]
     
    # Wenn Bedingung nicht erfüllt, dann URL umschreiben und an die index.php übergeben.
    RewriteRule ^.*$ index.php [NC,L]

    Gruß Kyoya Stefan
    Geändert von Kyôya (16.12.11 um 00:24 Uhr)
     
    Oracle Certified MySQL 5 Professional Developer
    Zend Certified PHP 5.3 Engineer

    Vorträge, Webinare, etc im Mayflower - Blog

  6. #6
    ben78 ben78 ist offline Mitglied Bronze
    Registriert seit
    Jan 2010
    Beiträge
    34
    O. K....werd ich sofort ausprobieren
     

  7. #7
    Avatar von the snake II
    the snake II the snake II ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Ort
    Krefeld
    Beiträge
    132
    Dann im Script bekommst du den Teil hinter der Domain mit Suffix wie folgt:
    PHP-Code:
    // http://www.blabla.de/unterseite/param1/param2

    $querystring $_SERVER['REQUEST_URI'];

    echo 
    $querystring// gibt aus: "/unterseite/param1/param2" 
    Und diesen String kann man dann auch mit pathinfo zerlegen, aber auch einfach mit explode, interpretieren und dementsprechende Dinge tun.
    Geändert von the snake II (16.12.11 um 00:52 Uhr)
     

  8. #8
    ben78 ben78 ist offline Mitglied Bronze
    Registriert seit
    Jan 2010
    Beiträge
    34
    .htaccess verwirrt mich ohne Ende
    Dann im Script bekommst du den Teil hinter der Domain mit Suffix wie folgt:
    PHP-Code:
    // http://www.blabla.de/unterseite/param1/param2

    $querystring = $_SERVER['REQUEST_URI'];

    echo $querystring; // gibt aus: "/unterseite/param1/param2"
    werd ich gleich mal umsetzen...

    Hey Leute...ich gebe Euch gleich einen Report...Langsam haut's hin aber noch nicht ganz...

    Ich bekomm's nicht hin

    So schaut jetzt meine .htaccess aus wie von Kyôya gepostet...Nochmals Danke an der Stelle:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    # Bedingung: Die angeforderte Datei befindet sich im Dateisystem:
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
     
    # Wenn Bedingung erfüllt, dann nicht umschreiben und Datei ausliefern.
    RewriteRule ^.*$ - [NC,L]
     
    # Wenn Bedingung nicht erfüllt, dann URL umschreiben und an die index.php übergeben.
    RewriteRule ^.*$ index.php [NC,L]

    meine index.php ist vorhanden aber eine Umleitung findet nicht statt, sobald ich den Link betätige. Ich werde das ganze jetzt nochmal von vorne durcharbeiten...ich hoffe ihr könnt mir weiterhelfen...wäre echt super von Euch...******

    Leute, die Geschichte mit der index.php hab ich jetzt hinbekommen. Also bei jedem Klick auf den Link gelangt man nun zur index.php und alle Funktionen lassen sich dort einwandfrei ausführen. Das ganze hab ich jetzt ausschließlich mittels PHP realisiert und erstmal komplett auf .htaccess verzichtet...

    Aber das ich nicht um die .htaccess herumkommen wenn ich die URL's in gewünschte Form bringen will, weiss ich selbst. Ich geh jetzt erstmal schlafen und melde mich dann wieder, wenn ich mit der .htaccess rummache...Aber erstmal vielen Dank an der Stelle für Eure Hilfe Jungs...
    Geändert von sheel (16.12.11 um 11:24 Uhr) Grund: Vierfachpost
     

  9. #9
    Kyôya Kyôya ist offline Mitglied Silber
    Registriert seit
    Nov 2011
    Ort
    Würzburg
    Beiträge
    62
    In deiner .htaccess fehlt die Zeile
    Code :
    1
    
    RewriteEngine On
     
    Oracle Certified MySQL 5 Professional Developer
    Zend Certified PHP 5.3 Engineer

    Vorträge, Webinare, etc im Mayflower - Blog

  10. #10
    Avatar von the snake II
    the snake II the snake II ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Ort
    Krefeld
    Beiträge
    132
    Hier mal ein Ansatz, den ich gestern noch geschrieben habe:

    PHP-Code:
    /***********/
    /* Routing */
    /***********/
    $request $_SERVER['REQUEST_URI'];

    $request_parts explode('/',$request);

    //filter empty elements
    $request_parts array_filter($request_parts);

    //reset keys
    $request_parts array_merge($request_parts);

    $request_parts_count count($request_parts);

    $current_part 0;

    //Language - if it's not one of the languages
    // defined in the $CONFIG->get('languages') array,
    // redirect to this request with default language
    $language_name $CONFIG->get('defaultLanguage');
    if(
    $request_parts_count $current_part && in_array($request_parts[$current_part],$CONFIG->get('languages'))){
        
    $language_name $request_parts[$current_part];
        
    $current_part++;
    }
    else{
        
    header('Location: '.$CONFIG->get('defaultLanguage').$request);
    }


    //Controller
    $controller_name $CONFIG->get('defaultController');
    if(
    $request_parts_count $current_part){
        
    $controller_name $request_parts[$current_part];
        
    $current_part++;
    }

    //Action
    $action_name $CONFIG->get('defaultAction');
    if(
    $request_parts_count $current_part){
        
    $action_name $request_parts[$current_part];
        
    $current_part++;
    }

    //Parameters
    $parameters = array();
    if(
    $request_parts_count $current_part){
        
    $i=0;
        foreach(
    $request_parts as $part){
            if(
    $i<3){
                
    $i++;
                continue;
            }else{
                
    //Try to split the parameter
                
    $param_parts explode(':',$part);
                if(
    count($param_parts) > 1)
                    
    $parameters[$param_parts[0]] = $param_parts[1];
                else {
                    
    $parameters[] = $part;
                }
            }
        }

    Das ganze hat dann folgenden Effekt:
    PHP-Code:
    // http://www.blabla.de/en/controller1/action1/parameter1/parameter2:wert2/parameter3
    $language_name//en
    $controller_name//controller1
    $action_name//action1
    $parameter[0]; //parameter1
    $parameter['parameter2']; //wert2
    $parameter[2]; //parameter3 
    Das ganze Arbeitet mit einem $CONFIG Objekt. Das müsste man dann entsprechend Anpassen.
    Dort sind z.B. default Controller und Actions definiert, Standardsprache etc.
    Vielleicht hilft Dir das ja.
     

  11. #11
    ben78 ben78 ist offline Mitglied Bronze
    Registriert seit
    Jan 2010
    Beiträge
    34
    Code :
    1
    2
    3
    4
    
    In deiner .htaccess fehlt die Zeile
    Code :
    1
    RewriteEngine On
    ...hab ich in meiner .htaccess an erster Stelle stehen...

    @SNAKE...fitte Sache Dein Ansatz...für mich aber noch etwas zu hoch...ich bin jetzt erstmal glücklich, dass alles bei der index.php landet, wenn Link betätigt.

    Mein Problem liegt nur noch bei der .htaccess und dem Erscheinungsbild der URL. Ich habe nach wie vor den Code von Kyôya in meiner .htaccess stehen und so schaut der Link aus:
    Code :
    1
    
    <a href="'.$pfadangabe.'?param1='.$var1.'&param2='.$var2.'&param3='.$var3;
    E D I T:
    $pfadangabe = Domain ohne .html
    $link_string = enthält .html am Ende der URL

    Leute...könnt Ihr mir Bitte posten wie dieser Link ausschauen soll, damit's mit der .htaccess hinhaut und ich Slashes als auch Bindestriche anstelle von Frage- und Istgleichzeichen habe...oder muss ich vorher noch den .hataccess-Code von Koya irgendwie bearbeiten...Das Prinzip für mod_rewrite habe ich bereits verstanden. Also an die index.php wird die echte URL übergeben welche mit einer festgesetzten Regel in der Adresszeile angezeigt wird...
    ...Jungs sorry für meine blöden Fragen...mir wird's langsam peinlich...schäm schäm...
    Geändert von ben78 (16.12.11 um 21:12 Uhr)
     

Ähnliche Themen

  1. URI umschreiben mit str_replace
    Von xtramen01 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 21.06.09, 18:38
  2. mod_rewrite - Subdomains "umschreiben"
    Von DJLopez im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 18.10.07, 19:47
  3. PHP in cgi umschreiben
    Von dsaer im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 1
    Letzter Beitrag: 28.03.07, 08:46
  4. swf namen umschreiben
    Von Denniz im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 14.09.06, 13:08
  5. Kompletten Domainnamen umschreiben mit mod_rewrite?
    Von hudri im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 03.11.04, 11:55