Zur Navigation

mod_rewrite %{REQUEST_URI} Problem

1 gfguser

Hallo Forum,
Ich versuche per .htaccess zu überprüfen, ob Dateien als gecachte, statische HTML Dateien auf dem Server vorhanden sind. Trifft dies zu, sollen sie aufgerufen werden.
Dazu habe ich in die .htaccess folgendes geschrieben:


RewriteEngine On
RewriteBase /
RewriteCond /kunden/xxxx_xxxxx/webseiten/webseite/typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}/%{REQUEST_URI}index.html -f
RewriteRule .* typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}/%{REQUEST_URI}index.html [L]

Mit dieser Konfiguration bekomme ich immer einen Scriptfehler (500).
Die statischen Dateien, die ich aufrufen möchte sind auf dem Server vorhanden.
Sobald ich in der RewriteRule "%{REQUEST_URI}" testweise gegen die URL austausche, funktioniert alles perfekt und die gecachte Datei wird im Browser angezeigt.
Auch die Rewrite-Condition scheint so wie oben angegeben mit %{REQUEST_URI} nicht zu greifen.

(Ich setze diese htaccess auf einem virtuellen Server bei domain)factory in einer Subdomain ein. Es handelt sich um eine Typo3-Installation mit der Extension nc_staticfilecache).

17.12.2007 02:00

2 Jörg

Hallo gfguser,

ich würde die Umschreibung ohne RewriteBase versuchen.

Dann sollte sich der Ausdruck hinter der RewriteCond auf das Domain Root, nicht auf das Server Root beziehen

Bei %{REQUEST_URI} ist zu bedenken, dass dieses bereits einen beginnenden Slash enthält (z.B. "/example.php"), hier folglich ein Slash wahrscheinlich überzählig ist:

typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}/%{REQUEST_URI}index.html

17.12.2007 10:35

3 gfguser

Hallo Jörg und danke für deine schnelle Antwort. Allerdings hatte ich das auch schon ausprobiert. Es scheint wie verhext. Sobald ich %{REQUEST_URI} oder %{REQUEST_FILENAME} in die Rule einbaue bekomme ich einen Scriptfehler.

17.12.2007 13:54

4 Jörg

Normalerweise benötigt man %{REQUEST_URI} nicht in einer Rule - dort kann der geklammerter Ausdruck auch durch die Variable $1 wiederaufgenommen werden. Probier es mal so:

RewriteRule (.*)$ typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}/$1index.html [L]

17.12.2007 14:10 | geändert: 17.12.2007 14:11

... 3 Jahre und 2 Monate später ...

5 Oli (Gast)

Hi Jörg

Ich habe fast das genau gleiche Problem. Safari zeigt mir immer ein doppel Slash und die ganze URL.

Meine RewriteRule wird komplett ignoriert, was immer ich da schreibe es ändert nichts :-(


RewriteCond %{DOCUMENT_ROOT}/typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}/%{REQUEST_URI}/index.html -f
RewriteRule .* typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}/%{REQUEST_URI} [L]

Vielleicht hast du mir ein Tipp?

Cheers - Oli

25.02.2011 16:29

6 Oli (Gast)

Hiern noch mein komplettes .htaccess


#####
# 
# Vorlage: .htaccess Datei für den Einsatz von RealURL und Static File Cache
# Wird die Erweiterung Static File Cache nicht eingesetzt, kann der Abschnitt
# (siehe Markierung weiter unten) einfach entfernt werden.
#
# Diese Vorlage wurde von Martin Günther auf Basis der TYPO3 Standardvorlage
# erstellt, angepasst und kommentiert.
# 
# Hinweis: Je nach Konfiguration des Webservers, sind ggf. Änderungen vorzunehmen.
# Eine Garantie das diese Vorlage einwandfrei funktioniert, kann nicht gegeben werden.
#
####

# URL rewriting aktivieren
RewriteEngine on



# Liegt die TYPO3 Installation nicht im Root-Verzeichnis des Servers
# muss der Pfad hier angepasst werden
# RewriteBase /

####################################################################################
# Dieser Abschnitt enthält die notwendigen Einstellungen für die Erweiterung
# Image RealURL und kommt ausschliesslich dann zum Einsatz, wenn Sie den
# Standard-Pfad typo3temp/fl_realurl_image/ aus dem Bild-URL entfernen.
# D.h. wenn Ihnen das nichts sagt, lassen Sie diesen Bereich auskommentiert
# oder löschen es am besten ganz aus Ihrer .htaccess. Datei.

# falls es Probleme mit dem URL-Rewriting gibt, kann es ggf. helfen %{DOCUMENT_ROOT}
# gegen den absoluten Pfad der TYPO3 Installation zu tauschen
RewriteCond %{DOCUMENT_ROOT}/typo3temp/fl_realurl_image%{REQUEST_URI} -f  [OR]
RewriteCond %{DOCUMENT_ROOT}/typo3temp/fl_realurl_image%{REQUEST_URI} -l
RewriteRule ^(.*)$ typo3temp/fl_realurl_image/$1 [L]

# Um die alten, vorher gültigen Bild-URLs, zu deaktivieren, können Sie
# eine der nachfolgenden Zeilen verwenden und damit einen Fehlercode ausgeben

# gibt 403 "forbiddden" aus
#RewriteRule ^(typo3temp|uploads)/.*\.(jpg|png|gif)$ - [F]

# gibt 404 "not found" aus
#RewriteRule ^(typo3temp|uploads)/.*\.(jpg|png|gif)$ not-found [L]

# gibt 410 "gone" aus
#RewriteRule ^(typo3temp|uploads)/.*\.(jpg|png|gif)$ - [G]

# Image RealURL Ende
####################################################################################

# Rewriting für die TYPO3 Installation bzw. für das Backend deaktivieren
RewriteRule ^(typo3/|t3lib/|tslib/|fileadmin/|typo3conf/|typo3temp/|uploads/|showpic\.php|favicon\.ico) - [L]


####################################################################################
# Dieser Abschnitt enthält die notwendigen Einstellungen für Static File Cache.
# Falls Static File Cache nicht eingesetzt wird, diesen Abschnitt einfach löschen.

# .xml, .js und .css Dateien werden nicht aus dem Cache geladen
RewriteCond %{REQUEST_FILENAME} !^.*\.xml$
RewriteCond %{REQUEST_FILENAME} !^.*\.css$
RewriteCond %{REQUEST_FILENAME} !^.*\.js$

# Mit strg + F5 kann das ausliefern der gecachten Datei erzwungen werden,
# auch wenn man im selben Browser im TYPO3 Backend angemeldet ist
RewriteCond %{HTTP:Pragma} !no-cache
RewriteCond %{HTTP:Cache-Control} !no-cache

# Falls die Website auch https Inhalte ausliefert, sollte die nachfolgende Zeile
# einkommentiert werden. Damit werden https Inhalte nicht gecached. Ohne diese
# Einstellung würden sonst http und https Inhalte im selben Ordner gecached.
# Für https sind gesonderte Einstellungen zu treffen, falls diese Inhalte
# auch gecached werden sollen.
# RewriteCond %{HTTPS} off

# Gecachte Seite nur ausliefern, wenn Nutzer nicht im Backend angemeldet ist.
# Hinweis: Die TYPO3 Nutzersession wird erst beendet, wenn der Browser geschlossen
# wird. Man sollte zum Testen daher einen anderen Browser verwenden oder die
# Auslieferung der Cache-Seite mit strg + F5 erzwingen.
RewriteCond %{HTTP_COOKIE} !be_typo_user [NC]

# Sicherstellen, dass der Nutzer nicht im Frontend angemeldet ist. Angemeldete
# Nutzer sehen i.d.R. andere (dynamische) Inhalte als nicht angemeldete Nutzer.
RewriteCond %{HTTP_COOKIE} !nc_staticfilecache [NC]

# Keine POST Anfragen cachen. Ausschließlich GET.
RewriteCond %{REQUEST_METHOD} GET

# Seiten mit dynamischen Parametern (? im URL) werden nicht gecached
RewriteCond %{QUERY_STRING} ^$

# *** WEICHE ***

# Prüfen ob eine gecachte Version der angeforderten Seite vorliegt.
# Wenn ja, wird diese geladen (und TYPO3 umgangen) ansonsten muss die Seite
# durch TYPO3 erst einmal generiert werden.
# Diese Zeilen sind für den Einsatz mit RealURL
# Die nachfolgenden 2 Zeilen sind für statische URLs die mit .html enden 

RewriteCond %{DOCUMENT_ROOT}/typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}/%{REQUEST_URI}/index.html -f
RewriteRule .* typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}/%{REQUEST_URI} [L]

# Enden die statischen URLs mit / sind die nachfolgenden 2 Zeilen zu verwenden.
# Die oberen 2 müssen dann auskommentiert werden. 
# RewriteCond %{DOCUMENT_ROOT}/typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}/%{REQUEST_URI}index.html -f
# RewriteRule .* typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}/%{REQUEST_URI} [L]

# Hinweis: Die Weiche muss, je nach Pfad der TYPO3 Installation ggf. angepasst werden.
# Liegt die TYPO3 Installation nicht im Hauptverzeichnis (Document Root), so muss das
# entsprechende Verzeichnis hinter %{DOCUMENT_ROOT} hinzugefügt werden.
# Beispiel: %{DOCUMENT_ROOT}/unterverzeichnis/typo3temp/tx_ncstaticfilecache/...

# ***WEICHE*** Ende

# Static File Cache Ende
####################################################################################


# Prüfen ob angeforderte URL eine Datei z.B. Grafik, PDF-Datei, ... ist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

# URL rewriting
RewriteRule .* index.php [L]

25.02.2011 16:30

7 Jörg

Hast du probiert, die Rule (wie in Beitrag 4 beschrieben) abzuändern und (wie in Beitrag 2 beschrieben) den Slash vor %{REQUEST_URI} zu entfernen:

RewriteCond %{DOCUMENT_ROOT}/typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}%{REQUEST_URI}/index.html -f
RewriteRule ^(.*)$ typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}/$1 [L]

25.02.2011 17:03 | geändert: 25.02.2011 17:04

8 Oli (Gast)

Hallo Jörg

Super vielen Dank! Dachte ich hätte schon alle Variante ausprobiert.

Der Doppelslash ist jetzt weg. Die URL hat am Ende noch einen Slash zuviel und endet so .html/

Zudem gleaube ich, sollte nicht die URL zum gecachten File sichtbar sein. Die ist nicht wirklich schön. Hat das auch was mit dem .htaccess zu tun oder habe ich sonst was falsch konfiguriert?

Gruss und nochmals vielen vielen Dank :-)

25.02.2011 17:12

9 Oli (Gast)

Sorry, noch ein Nachtrag, der Slash am Schluss stimmt wohl schon, da das Verzeichnis so heisst und darin ein index.html liegt. Der Pfad ist also korrekt.

Jetzt müsste ich es nur noch so hinbekommen dass die schöne URL bleibt und nicht auf die Cache URL springt.

Gruss und schöns weekend

25.02.2011 17:19

10 Jörg

Jetzt müsste ich es nur noch so hinbekommen dass die schöne URL bleibt und nicht auf die Cache URL springt.

Kannst du mal ein konkretes Beispiel geben, was für eine URL du eingibst - und wohin diese weitergeleitet wird? Eine Änderung der URL = Weiterleitung sollte die genannte Rule nicht herbeiführen - dazu müsste eine vollständige URL als Weiterlungsziel angegeben sein. Möglicherweise funkt da eine andere Rule dazwischen.

25.02.2011 18:14 | geändert: 25.02.2011 18:15