kostenloser Webspace werbefrei: lima-city


Url Rewrite in .htaccess

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    danielderhacker

    danielderhacker hat kostenlosen Webspace.

    Hallo an alle,

    ich habe ein kleines Problem beim Url umschreiben.
    Leider verstehe ich die .htaccess Notation noch nicht ganz (hab erst vorgestern damit angefangen) und hab im Internet noch keine Anleitung in die Richtung gefunden.

    Zu meinem eigentlichen Problem:
    Ich versuche die Url so umzuschreiben, dass sie wie bei Wikipedia oder hier aussieht, kann dabei aber maximal eine Variable übergeben und die darf nicht mit einem "/" enden, weil sonst Firefox (oder der IE) den Pfad als Ordner interpretiert und das Stylesheet nicht mehr findet. Wenn ich dem Stylesheet-Pfad über Firebug (Firefox Addon zum Debuggen von Webseiten) ein "../" anfüge funktioniert wieder alles.
    Leider habe ich im Internet noch keinen Hinweis auf den Fehler gefunden.


    Technische Informatinen:

    Standard-Pfad: localhost/testserver/seitenname/index.php
    Nach Manipulation: localhost/testserver/seitenname/variable (wird auch korrekt übergeben und ausgewertet)
    Fehler bei: localhost/testserver/seitenname/variable/ (egal, was jetzt kommt)

    Code in der .htaccess (hab ich aus dem Inet und leicht angepasst)
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* ./index.php

    Server:
    Xampp-Paket 1.7.3
    Apache 2.2.14
    Windows 7 HomePremium 64bit

    index.php liegt in "seitenname", index.css in "seitenname/styles"

    Vielen Dank für eure Hilfe,
    Daniel
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. danielderhacker schrieb:
    eine Variable übergeben und die darf nicht mit einem "/" enden


    Du kannst das / Zeichen am Ende raus filtern, bevor Du den Link ausgibst

    $linkname = rtrim($linkname , '/');


    dann ist das / Zeichen am Ende des Links weg

    und die Variable musst Du auch übergeben, z.B. als $seite an die index.php

    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule (.*)$ /index.php?seite=$1 [L]


    und warum kannst Du nur eine Variable übergeben? geht doch auch mehrere
    hier BSP getrennt durch Unterstrich _ in der URL und zweiter Wert als $typ übergeben
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)_(.*)$ /index.php?seite=$1&typ=$2 [L]


    wenn weiter Probleme mit Stylesheed Pfad
    dann einfach die komplette URL zur CSS-Datei nehmen, nicht ./
  4. danielderhacker schrieb:
    ...
    Zu meinem eigentlichen Problem:
    Ich versuche die Url so umzuschreiben, dass sie wie bei Wikipedia oder hier aussieht, kann dabei aber maximal eine Variable übergeben und die darf nicht mit einem "/" enden, weil sonst Firefox (oder der IE) den Pfad als Ordner interpretiert und das Stylesheet nicht mehr findet. Wenn ich dem Stylesheet-Pfad über Firebug (Firefox Addon zum Debuggen von Webseiten) ein "../" anfüge funktioniert wieder alles.
    Leider habe ich im Internet noch keinen Hinweis auf den Fehler gefunden.
    ...


    Also wenn du noch prüfen würdest, ob die Angeforderte Datei eine ein Verzeichnis ist, würde der FF usw. damit keine Probleme haben.
    RewriteCond %{REQUEST_FILENAME} !-d


    Doch wenn ich ehrlich bin, würde ich einen anderen Weg gehen um auf die angeforderte Webseite zu kommen.

    Ich würde in PHP mit hilfe von
    $_server['REQUEST_URI']
    die angeforderte Webseite und den Content ermitteln. Dann musst du auch keine QueryStrings an die PHP anhängen...
  5. Autor dieses Themas

    danielderhacker

    danielderhacker hat kostenlosen Webspace.

    Hi, danke für eure Antworten!

    @girogratis:
    Diese Methode kenne ich schon, nur wollte ich die Variablen komplett mit php auswerten, so muss ich immer die .htaccess verändern, wenn ich was an der Programmierung ändere.
    Das / abzuschneiden ist zwar einfach, behebt aber nur das Symptom und nciht das eigentliche Problem.
    So wie es bei Wikipedia ausschaut müsste es auch ohne absolutem Pfad gehen (zumindest beim favicon.ico)

    @dexus85:
    Ich hätte versucht deine Zeile einzufügen, hat aber nicht gewirkt, vielleicht habe ich irgendwas falsch gemacht (hätte aber alle 3 Positionen ausprobiert).

    Mein Code zum Auswerten der Variablen:
    ### Einlesen der Variablen
    $url = $_SERVER['REQUEST_URI'];        ### Ermitteln der Url
    $dir =  basename(realpath('.'));           ### Ermitteln des aktuellen Verzeichnisses, um übergeordnete abschneiden zu können
    
    $url = explode($dir, $url);               ### Auftrennen der Url in Pfadangabe und Variablen                       
    $vars = explode('/', $url[1]);           ### Aurtrennen der einzelnen Variablen, achtung $vars[0] = ""



    Mein Script wird ohne Probleme ausgeführt, nur der Browser glaubt, dass er sich in einem Unterordner befindet wenn nach der ersten Variable ein / kommt.

    lg
    Daniel

    Edit
    P.S.
    Inzwischen habe ich rausgefunden, warum das bei Wikipedia funktioniert: der link auf die favicon.ico ist /favicon.ico. Wenn ich meinen Stylesheet-Link in /testserver/Seitenname/styles/index.css ändere funktionierts bei mir jetzt auch mit / am ende der Url, allerdings gefällt mir der "halbabolute Pfad" auch nicht besonders.
    Hat jemand eine Idee ob sich der Teil bis Seitenname über einen .htaccess Eintrag ersetzen lässt (einmal pro Ordner ändern ist immer noch besser als jeden Link ändern...)

    Beitrag zuletzt geändert: 11.3.2012 13:22:29 von danielderhacker
  6. Du kannst ja den Pfad für die Stylesheed-Datei dynamisch machen

    je nachdem ob URLmit / oder ohne ist

    $url = $_SERVER['REQUEST_URI']; 
    
    $laenge = strlen($url)-1;
    $erg = substr($url, $laenge );
    
    if ($erg == "/") {    
      $stylepath = '../';  // --- stylesheet Datei eine Ebene tiefer abholen 
    }
    else {
      $stylepath = './'; 
    }


    und im Template diesen Pfad $stylepath im Stylesheed href einfügen

    <link rel="stylesheet" type="text/css" href="<?php echo $stylepath; ?>styles/style.css" />


    sorry, hardcoded :)
  7. Autor dieses Themas

    danielderhacker

    danielderhacker hat kostenlosen Webspace.

    Hallo girogratis!

    Korrigiere mich wenn ich jetzt was falsch verstanden habe, aber damit wird doch nur geprüft ob die Url auf / endet oder nicht?
    Wenn ich jetzt zwei Variablen übergeben will ("localhost/seitenname/var1/var2") löst der / nach var1 mein Problem aus. Damit ist es egal, auf was meine Url endet.

    lg
    Daniel
  8. Hallo Daniel,

    ja der Code oben prüft nur das aller-letzte Zeichen, ob es ein / ist

    ich wusste nicht, dass du jetzt doch mehr als eine Variable übergeben willst

    aber auch das ist lösbar

    .... entweder anderes Trenner-Zeichen zwischen den Variablen
    also anstatt var1/var2 eben var1_var2 und dann bei explode() mit den neuen Trenner aufteilen
    (das wäre wohl das einfachste)

    ... oder bei aufteilen der Variablen mit explode zählen,
    wie oft das / Zeichen vorkommt, und dem entsprechend den Stylesheet-Pfad anpassen
    $vars = explode('/', $url[1]); 
    
    $var_anzahl = count($vars); 
    
    $stylepath = ''; 
    
    $pfad_stufe = "../"; 
    
    if ($var_anzahl > 0) { 
      for $x=0; $x<$var_anzahl; $x++) { 
          $stylepath .= $pfad_stufe; 
      }
    }
    else { 
      $stylepath = './'; 
    }
    
    
    // ----  und dann im Template die Stylesheet Datei mit dem $stylepath laden
    
    echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"".$stylepath."styles/style.css\" />\n";


    nicht getestet, nur ne Idee :)

    also so machen,
    wenn du nur /var hast, dann eine Ebene runter
    wenn Du /var1/var2 hast, dann zwei Ebene runter mit ../../
    wenn du /var1/var2/var3 hast dann drei Ebenen runter mit ../../../
    usw.

    kann man bestimmt auch anders / besser machen, z.B. mit case ... switch oder foreach()
    nur so als Idee die Schleife je / Zeichen in Varnamen-String eine Stufe runter für .css Datei href

    ich hoffe ich habe mich verständlich ausgedrückt

    .... aber wie gesagt, einfacher wäre den Trenner nicht als / zu machen
    Du kannst es dann für Rewrite auch als .html Datei aussehen lassen

    localhost/seitenname/var1_var2.html

    musst halt dann für den Variablen-String noch das .html abtrennen
    ... apropos, wenn Du Teile aus string entfernen willst, nimm besster str_replace als explode

    $url = $_SERVER['REQUEST_URI'];     
    $dir =  basename(realpath('.'));   
    
    $url = str_replace($dir,'', $url); 
    $url = str_replace('.html','', $url); 
    
    $vars = explode('_', $url);



    Beitrag zuletzt geändert: 11.3.2012 17:08:19 von girogratis
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!