Rewrite Rule
oliver.d.
- htaccess
- regex
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
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
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.
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
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.
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.
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