oliver.d.: Rewrite Rule

Guten Abend,

folgender Inhalt in der .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^kalender/(.*)$ index.php?c=$1
</IfModule>

Funktioniert super. Seiteninhalt wird angezeigt nur stimmt der Pfad zum css und anderen Dateien nicht mehr.

Was mache ich den falsch? Danke für eure Hilfe.

Angenehmen Abend oliver

akzeptierte Antworten

  1. Hallo oliver.d.,

    Seiteninhalt wird angezeigt nur stimmt der Pfad zum css und anderen Dateien nicht mehr.

    Was mache ich den falsch?

    Du gibst den Pfad zur CSS-Datei falsch an. Durch deine RewriteRule wird ein interner Sub-Request ausgelöst, für den Client ändert sich also der Pfad nicht. Er geht beim Auflösen des Pfads zur CSS-Datei also von kalender/<irgendwas> aus.

    Um das zu fixen musst du entweder ein [R] an deine RewriteRule anhängen so dass ein 302 gesendet wird, den Pfad zu deiner CSS-Datei ändern oder alternativ den Pfad zur CSS-Datei absolut angeben.

    LG,
    CK

  2. Hello,

    Seiteninhalt wird angezeigt nur stimmt der Pfad zum css und anderen Dateien nicht mehr.

    Darum gebe ich Pfade immer absolut zur Domain an, also mit führendem Slash und vollständig.

    Du könntest es mit symbolischen links probieren. Zeig doch mal, wie der Pfad aussieht, und wie er aussehen müsste.

    Liebe Grüße
    Tom S.

    --
    Die Krawatte ist das Kopftuch des Westens
    1. So sieht die Struktur aus:

      -calendar
      --self1
      ---id
      ---cal1.1.ics
      ---cal1.2.ics
      --html2
      ---id
      ---cal2.1.ics
      ---cal2.2.ics
      -css
      --style.css
      -include
      --header.php
      --footer.php
      index.php
      foo.php
      bar.php
      .htaccess
      

      Quelltext der .htaccess

      <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
      RewriteRule ^kalender/(.*)$ index.php?c=$1
      </IfModule>
      

      Die per GET übergebene Variable c symbolisiert die erste Ebene Unterordner in calendar. URL soll also so aussehen: www.example.de/kalender/self1

      Soweit der Plan, klappt auch. Der Inhalt der index.php:

      <?php
      include(__DIR__.'/include/header.php');
      
      // weiterer Code
      
      include(__DIR__.'/include/footer.php');
      ?>
      

      In der header.php wird das css eingebunden.

      <link href="../css/style.css" rel="stylesheet">
      

      Dank der ../ funktioniert das css mit der RewriteRule jetzt.

      Gibt es den Tips wie man generell Verweise auf anderen Dateien in seinem Projekt anlegen sollte? Wie macht ihr das?

      LG Danke oliver

      1. Hello,

        nur kurz, ich muss los...

        <?php
        include(__DIR__.'/include/header.php');
        
        // weiterer Code
        
        include(__DIR__.'/include/footer.php');
        ?>
        

        ich include da immer so:

        
        include (rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/../includes/footer.php'); 
        
        

        Das includes-Verzeichnis liegt dann außerhalb der DocRoot.

        Das Abschneiden des Trailing Slash deshalb, weil der machmal in einigen Konfigurationen angegeben ist.
        Irgendwann war da auch noch mal etwas mit realpath(), weil einige Installationen bei Strato das sonst nicht verknusen können. Da müsstest Du mal hier im Archiv etwas suchen. Fastix hat sich mal dazu ausgelassen.

        Liebe Grüße
        Tom S.

        --
        Die Krawatte ist das Kopftuch des Westens
      2. Tach!

        Gibt es den Tips wie man generell Verweise auf anderen Dateien in seinem Projekt anlegen sollte? Wie macht ihr das?

        Ein "sollte" gibt es nicht, das kannst du nach Vorliebe und Anwendungsfall machen. Es muss nur funktionieren. Wenn der Pfad unbekannt lang ist, dann kann man, wie schon gesagt, die Verweise im HTML relativ zum Docroot anlegen. Verweise im Code sind relativ zum include_path am einfachsten und flexibel notierbar.

        dedlfix.

      3. Hallo oliver.d.,

        Gibt es den Tips wie man generell Verweise auf anderen Dateien in seinem Projekt anlegen sollte? Wie macht ihr das?

        Gruß
        Julius