1. Juli 2006 in Journal » Programmierung

.htaccess erklärt

Einige Anfragen zu meiner .htaccess-File trieben mich zu diesem Artikel. Ich möchte euch also einen knappen Einblick gewähren. Aus Sicherheitsgründen stelle ich euch nicht die gesamte Date vor. Das müsst ihr verstehen.

Options +FollowSymlinks

Diese Anweisung war mir besonders wichtig. Sie sorgt bei jeder jedem Request, dass die alten URLs auch noch funktionieren. Sonst würden die ganzen alten Links zu mir nicht mehr funktionieren.

# Journal
RewriteRule ^journal?$ index.php?d=1
RewriteRule ^journal/?$ index.php?d=1

Eine der einfachsten Regeln. Sie schreibt vor, dass das Verzeichnis eigentlich nur die $_GET Variable d aufruft - Wenn $_GET["d"] nämlich 7 ist, wird die Journal-Übersicht aufgerufen.

# Feeds
RewriteRule ^rss-feeds/journal/rss.xml?$ rss.php
RewriteRule ^rss-feeds/journal/kommentare/rss.xml?$ rss-comments.php
RewriteRule ^rss-feeds/journal/kommentare/([0-9]+)/rss.xml?$ rss-comments.php?id=$1
RewriteRule ^rss-feeds/tipps/rss.xml?$ rss-links.php

Das Apachemodul erlaubt, auch genaue Dateinamen umzuleiten. So ist es nicht nur möglich, Verzeichnisse als Regeln festzulegen, sondern eben auch Dateien, wie z.B. rss.xml.

#Artikellinks
RewriteRule ^journal/([A-Za-z0-9-]+)/([A-Za-z0-9-_]+)?$ index.php?d=7&call_name=$2
RewriteRule ^journal/([A-Za-z0-9-]+)/([A-Za-z0-9-_]+)?/$ index.php?d=7&call_name=$2

Dieser Teil ist besonders interessant: Da ist zwar ein bisschen geschummelt worden, aber egal. Das letzte Verzeichniss stellt dem PHP-Compiler die Variable $_GET["call_name"] bereit. Die PHP-Datei sucht dann in der Datenbank nach dem passenden Eintrag in der Journal-Tabelle.

Ich hoffe, dieser Einblick in meine .htaccess macht die Sache nun ein bisschen klarer. Leider kann ich euch nicht näheres erklären, da ich mich nicht wirklich mit regulären Ausdrücken auskenne. Eine Google Suche hilft euch da aber bestimmt weiter.

Da fällt mir direkt mal eine Frage ein. Bei dem Editor Zend werden die .htaccess Dateien irgendiwe nicht angezeigt. Das liegt wohl daran, dass kein Dateiname, sondern nur die Dateinamenserweiterung. Gibt es dafür eine Einstellung, sodass sie angezeigt wird?


16 Kommentare

Tom S. Weber am 1. Juli 2006 #

Es wäre noch spannend wie du es mit dem Style der Seite gelöst hast. Wenn du ja alle dynamischen Links per mod rewrite überschreibst, musst du ja dein Stylesheet absolut verlinken - d.h. dass auch alle Bilder etc. absolut verlinkt werden müssen. Oder hast du da eine Alternative gefunden?

Jens Meiert am 1. Juli 2006 #

Meine zwei Cent zur .htaccess: Neben der Angabe des Default-Encodings (Beispiel "AddDefaultCharset utf-8") sowie des Umschreibens der URL (mit oder ohne "www", was bei dir ja auch aktiviert scheint) ist die "CheckSpelling"-Direktive unschätzbar ("CheckSpelling On"), da sie kleinere Vertipper abfängt (fehlende Buchstaben oder Dreher in Datei- und Ordnernamen). Berührt prinzipiell die Performance, schont aber die Error-Logs - und verbessert die Nutzererfahrung.

Heiko Klingele am 1. Juli 2006 #

Ich erhalte bei einem Aufruf von www.domain.de/test/ nur eine leere weiße Seite.


mod_rewrite wurde laut phpinfo(); als Modul geladen.

Folgenden Inhalt hat meine .htaccess:
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteRule ^test?$ index.php?function=test

Kannst du helfen? :)

Heiko Klingele am 1. Juli 2006 #

Nachtrag:
In der error.log von Apache wird bzgl. der .htaccess auch nichts hinterlassen.
Ich weiß einfach nicht mehr weiter... :(

Martin Labuschin am 1. Juli 2006 #

Heiko, dass das mod-rewrite-Modul installiert und aktiviert ist, heisst nicht direkt, dass es bei deinem Web verfügbar ist. Frag mal deinen Reseller oder Administrator des Servers, ob das Modul für dich verfügbar gemacht werden kann.

Heiko Klingele am 2. Juli 2006 #

Ich habe das Problem nun endlich behoben!
Es lag an meiner xampp version 1.5.1 welche einen Bug in PHP hat. Habe mir nun die neuste Version von xampp aufgespielt und nun geht mein htaccess endlich! *grml*

Martin Labuschin am 2. Juli 2006 #

Schön, freut mich für dich. Wenn man solgange darauf warten muss wie ich, weiss man dieses Modul echt zu schätzen.

Heiko Klingele am 2. Juli 2006 #

Danke dir Martin! ;)
Ja, der Apache in Verbindung mit seinen vielen Modulen ist ein sehr mächtiges Tool, dass ich nicht mehr missen möchte!

Da ich einen eigenen Root-Server besitze ist das alles kein Problem. Ich hatte das Problem allerdings lokal, was mich ziehmlich gefuchst hatte, da ich keine Lust hatte alles online zu entwickeln. Aber nun geht ja alles. Gott sei dank! :)

Chris Dorner am 3. Juli 2006 #

Lokal (speziell bei XAMPP) wird das Modul mod_rewrite in Apache nicht standardmässig geladen, da musst du einfach noch die config-Datei abändern.

Siegfried am 3. Juli 2006 #

Hi,
wenn Du so mit gutem Beispiel vorangehst, kann ich nicht widerstehen und folge Dir :)

Heiko Klingele am 3. Juli 2006 #

@ Chris Dorner:
Lesen bildet! Hättest du meine Posts wirklich durchgelesen, solltest du wissen das bei mir mod_rewrite geladen wurde und es einen anderen Grund hatte, wieso es nicht funktioniert hat. ;)

Chris Dorner am 3. Juli 2006 #

Wollte es trotzdem erwähnen, da bei vielen lokal Probleme auftreten, und die meisten meinen dann das Modul wird standardmässig geladen.

ML am 3. Juli 2006 #

besonders erklärend ist dein ist dein artikel nicht wirklich. und er enthält ein paar fehler.
1. die option "followsymlinks" ist standard im apache, muß also nicht extra aktiviert werden. außerdem würden dein alten links auch mit deaktivierter option funktionieren. die option behandelt symbolische links.

2. bei allen 3 rewrite-beispiel-blöcken sind unnötige rules/zeichen enthalten. im ersten block ist die erste zeile überflüssig, es sei denn du willst das man das journal auch über journa aufrufen kann. das ? bedeutet, das das zeichen oder die gruppe direkt davor optional ist. demnach sind auch im zweiten block alle ? am ende der rules unnötig. im dritten block ist die erste rule überflüssig, und bei der zweiten gehört das ? hinter den slash, wenn du bezwecken willst, das der slash am ende einer url optional ist.

Weiterhin sollte hinter jede rule das [L]-flag für »last rule«, damit der server nicht jedesmal alle rules durchlaufen muss, um festzustellen welche paßt.


@jens meiert: checkspelling macht nur bei echten dateien und ordnern sinn, also eigenltich nur bei einem statischen auftritt.

Martin Labuschin am 4. Juli 2006 #

Ach Tom, hätte deine Frage fast vergessen. Wenn man das Sytslesheet auf jeder Seite gleich und absolut verlinkt ( http://labuschin.com/css/style.css ), muss der StilBilder-Ordner eigentlich nur relativ zur css-File liegen. Dann kann man auch Regeln, wie background: url(images/picture.jpg); ohne Sorgen nutzen.

Tom S. Weber am 4. Juli 2006 #

Is bei mir nie gegangen, aber klingt gut (für mich löst es ja WordPress :))

Martin Labuschin am 4. Juli 2006 #

Da läuft es aber auch nicht anders. Das Header-Template verlinkt doch das Stylesheet absolut. Frag mich aber jetzt bitte nicht woher ich das weiss ;)

Diskussion geschlossen

Die Kommentarfunktion dieses Artikels wurde deaktiviert. Private Mitteilungen an Martin bitte per E-Mail an martin@labuschin.com. Danke.