Seite 1 von 1

htaccess blockiert _POST von Dateien

Verfasst: 30.03.2013, 10:40
von LeoSolutions
Hallo zusammen,

ich habe ein riesiges Problem. Und zwar habe ich mir eine htaccess-Datei gebaut die sprechende URLs bewerkstelligen soll.
Das funktioniert auch alles wunderbar, nur wenn ich Dateien per _POST übermittle (_FILES), dann gibt es einen 404er - Seite wird nicht gefunden ... ich habe schon Stunden gesucht und gemacht und getan, aber egal was ich ändere, entweder _FILES geht immernoch nicht oder ich hau mir die komplette htaccess kaputt.

Über Hilfe wäre ich echt super dankbar!

Mein Provider ist All-Inkl Neue Medien Münnich und das hier ist meine htaccess:

Code: Alles auswählen

addtype application/x-httpd-php .xml
AddCharset UTF-8 .html .php .xml

RewriteEngine on
Options +FollowSymLinks
DirectoryIndex index.php
RewriteBase /

# Beendet Redirect Schleifen ==> Wenn ich das rausnehme, dann das geht gar nichts mehr
RewriteCond %{ENV:REDIRECT_STATUS} !^$
RewriteRule .* - [L]

# zieht das www. vor die eingegebene Domain
RewriteCond %{HTTP_HOST} !^www.
RewriteCond %{HTTP_HOST} !^$ [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

# Ausklammern von bestimmten Dateien
RewriteRule ^index\.php$ \/index.php [L]
RewriteRule ^sitemap\.xml$ \/sitemap.xml [L]
RewriteRule ^googled8b54c7ad0182048\.html$ \/googled8b54c7ad0182048.html [L]

# Ausklammern von bestimmten Verzeichnissen
RewriteRule ^(css|files|js|lib|msd1.24.4|min|tmp)($|/) - [L]

# schreibt die Dateinamen um für sprechende URI
RewriteRule (.*)\.xml(.*) $1.php$2 [nocase,L] # interpretieren von XML als PHP Code
RewriteRule ^(.*).php$ $1.html [L,R=301] # PHP wird in HTML umgeschrieben
RewriteRule ^index\.(php|htm|html)$ \/index.php [L] # jede index soll als index.php ungeschrieben werden (steht das in Konflikt zu dem Eintrag vorher?)
RewriteRule ^(en|fr|it|es)/(.*)\.(php|htm|html)$ \/index.php?id=$2&language=$1 [QSA,L] # Sprechende URI mit Sprach-Ordner
RewriteRule ^(.*)\.(php|htm|html)$ \/index.php?id=$1 [QSA,L] # Sprechende URI ohne Sprach-Ordner

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Liebe Grüße
Oliver

Verfasst:
von

Re: htaccess blockiert _POST von Dateien

Verfasst: 30.03.2013, 12:14
von Melegrian
Verstehe nicht ganz, was sich hier tun soll?
LeoSolutions hat geschrieben:

Code: Alles auswählen

# Ausklammern von bestimmten Dateien
RewriteRule ^index\.php$ \/index.php [L]
RewriteRule ^sitemap\.xml$ \/sitemap.xml [L]
RewriteRule ^googled8b54c7ad0182048\.html$ \/googled8b54c7ad0182048.html [L]
/ braucht nicht maskiert zu werden, wobei eine Maskierung ohnehin nur in den Mustern erforderlich ist und nicht beim Ziel. Somit soll für index.php eine index.php ausgelöst werden usw.?
LeoSolutions hat geschrieben:

Code: Alles auswählen

RewriteRule ^(.*).php$ $1.html [L,R=301] # PHP wird in HTML umgeschrieben
RewriteRule ^index\.(php|htm|html)$ \/index.php [L] # jede index soll als index.php ungeschrieben werden (steht das in Konflikt zu dem Eintrag vorher?)
Konflikt? Sieht zumindest merkwürdig aus. Zuerst werden alle Dateien einschließlich der index.php von .php auf .html weitergeleitet (nicht umgeschrieben, sondern weitergeleitet), um in der nächsten Zeile wieder für index.html die index.php auszulösen. Kommt da keine Endlosschleife zustande?

Vielleicht ja einfach nur diese Zeilen wie folgt austauschen?

Code: Alles auswählen

RewriteCond %{REQUEST_URI} !/index\.php$
RewriteRule ^(.*).php$ /$1.html [L,R=301]
RewriteRule ^index\.(htm|html)$ /index.php [L]

Verfasst: 30.03.2013, 12:42
von Synonym
Um das ganze etwas einfacher zu machen wäre es nützlich, den Dateinamen (bzw. die URL) zu kennen, von der der Post kommt und an die gepostet wird, also der "action" aus der Form.

Aber mal so grob gesagt. Die POST-Daten gehen bei einem Redirect verloren, nicht bei einem Rewrite. Es muss also was im Bereich mit R=xxx sein.

Wobei das aber auch seltsam ist, denn dann wären einfach nur dir Post-Daten weg. Da würde aber keine 404 Seite kommen. 404 heißt ja, dass die Seite nicht gefunden wurde, egal ob mit oder ohne POST-Daten.
# Ausklammern von bestimmten Dateien
RewriteRule ^index\.php$ \/index.php [L]
RewriteRule ^sitemap\.xml$ \/sitemap.xml [L]
RewriteRule ^googled8b54c7ad0182048\.html$ \/googled8b54c7ad0182048.html [L]

# Ausklammern von bestimmten Verzeichnissen
RewriteRule ^(css|files|js|lib|msd1.24.4|min|tmp)($|/) - [L]

# schreibt die Dateinamen um für sprechende URI
RewriteRule (.*)\.xml(.*) $1.php$2 [nocase,L] # interpretieren von XML als PHP Code
RewriteRule ^(.*).php$ $1.html [L,R=301] # PHP wird in HTML umgeschrieben
RewriteRule ^index\.(php|htm|html)$ \/index.php [L] # jede index soll als index.php ungeschrieben werden (steht das in Konflikt zu dem Eintrag vorher?)
Ausgehend davon, dass die erste fett markierte Rule funktioniert, kommt die Prüfung nie bis zur zweiten Markieren bei der index.php, da die immer bei der ersten abgefangen und beendet (L) wird.

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 30.03.2013, 13:19
von LeoSolutions
OK, danke schon mal für die Hilfestellung!

Kurz zur Erklärung:
mit dem Abschnitt "Ausklammern von bestimmten Dateien" wollte ich eigentlich das mod_rewrite abbrechen, bedeutet dass wenn z.B. die googled8b54c7ad0182048.html aufgerufen wird, dann soll da die auf dem Webserver befindliche Datei ausgegeben werden und nicht auf das CMS zurückgegriffen werden.
OK, das index.php nehm ich raus...

Verfasst: 30.03.2013, 16:34
von elmex
Das ist so ein Rewrite Chaos, das hab ich ja noch nie gesehen. Wegwerfen und von jemandem neu machen lassen, der es kann ;) Und vorher mal überlegen, was man davon eigentlich wirklich brauch!

Verfasst: 30.03.2013, 16:48
von LeoSolutions
Super kreative Hilfe zu meinem Problem! Sowas braucht jeder!

Aber Spaß bei Seite, bin schon ein ganzes Stück voran gekommen durch die hilfreichen Tipps von Melegrian und Synonym. Danke, wenn ich am Ziel bin poste ich hier das Ergebnis.

Wer dann Verbesserungen hat, darf es gerne vorschlagen.

Verfasst: 02.04.2013, 14:57
von LeoSolutions
Also vielen Dank nochmal an die beiden Helfer. Ich habe es jetzt eigentlich ganz gut hinbekommen. Geht zumindest alles so wie ich wollte.

Die ganze .htaccess dient dem Zweck einem CMS System zu sprechenden URI zu verhelfen und es außerdem noch um ein paar SEO-friendly Features zu ergänzen.

Code: Alles auswählen

RewriteEngine on
Options +FollowSymLinks
DirectoryIndex index.php
RewriteBase /

# zieht das www. vor die eingegebene Domain um DC zu vermeiden
RewriteCond %{HTTP_HOST} !^www.
RewriteCond %{HTTP_HOST} !^$ [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

# Ausklammern von Redirects in bestimmten Verzeichnissen
RewriteRule ^(css|files|js|lib|msd1.24.4|min|tmp) - [L,NC]

# Ausklammern von bestimmten Dateien im Root-Verzeichnis
RewriteCond %{REQUEST_FILENAME} /index\.php
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_FILENAME} /sitemap\.xml
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_FILENAME} /googleXXXXXXXXX\.html
RewriteRule ^.*$ - [NC,L]

# Leitet alle .php Dateien auf die .html Endung um, abgesehen von der index
RewriteCond %{REQUEST_URI} !/index\.php$
RewriteRule ^(.*).php$ /$1.html [L,R=301]
RewriteRule ^index\.(htm|html)$ /index.php [L]

# Sprechende URI mit Mehrsprachigkeit
RewriteCond %{REQUEST_URI} !/index\.php$
RewriteCond %{REQUEST_URI} ^(.*)\.(php|htm|html)$
RewriteRule ^(en|fr|it|es)/(.*)\.(php|htm|html)$ index.php?id=$2&language=$1 [QSA,L]
RewriteRule ^(.*)\.(php|htm|html)$ index.php?id=$1 [QSA,L]