Seite 1 von 1

zwei Conds, zwei Rules

Verfasst: 28.05.2009, 15:33
von silent321
Hallo,

ich verzweifle hier fast.

ich habe zwei Conditions und dazu zwei Regeln, jeweils hinter der Regel steht ein [L] für Last. Also wenn diese regel angewendet wurde keine weiteren anwenden.

Mod_Rewrite allerdings sagt nicht Last sonder wendet Regel 2 an, da diese natürlich auch zutrifft.

Code: Alles auswählen

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{REQUEST_URI} sitemap.xml
RewriteRule ^(.*)$ index.php?showsitemap&%{QUERY_STRING} [L]

RewriteCond %{REQUEST_URI} !Template
RewriteRule ^(.*)$ index.php?nav=$1&%{QUERY_STRING} [L]
Sprich:

Wenn "sitemap.xml" eingegeben wurde, soll index.php=showsitemap aufgerufen werden.

Trifft dies nicht zu, soll überprüft werden ob "Template" in der URL vorkommt, wenn das zutrifft soll aus der url index.php?nav=$1 werden.

Die Regeln klappen einzeln einwandfrei, nur zusammen wendet Mod_Rewrite immer die letzte an. egal ob ich sitemap.xml eingegeben habe


Viele Dank für Hilfen


Verfasst:
von

Verfasst: 28.05.2009, 16:01
von chrizz
das beschreibt in etwa dein Problem, wenn ich das richtig verstanden habe. Es scheint sogar eine Lösung zu geben ;)
https://www.webmasterworld.com/forum92/4104.htm

Fazit: Statt {REQUEST_URI} => {THE_REQUEST} nehmen...

so auf die Schnelle...

Re: zwei Conds, zwei Rules

Verfasst: 28.05.2009, 16:50
von Mork vom Ork
silent321 hat geschrieben:

Code: Alles auswählen

RewriteCond %{REQUEST_URI} sitemap.xml
RewriteRule ^(.*)$ index.php?showsitemap&%{QUERY_STRING} [L]

RewriteCond %{REQUEST_URI} !Template
RewriteRule ^(.*)$ index.php?nav=$1&%{QUERY_STRING} [L]
Mod_Rewrite allerdings sagt nicht Last sonder wendet Regel 2 an, da diese natürlich auch zutrifft.
mod_rewrite beachtet dein [L] durchaus, allerdings nicht da, wo du es erwartest. Nachdem du sitemap.xml durch index.php… ersetzt hast, wird die weitere Bearbeitung abgebrochen und eine neue, serverinterne Anfrage für index.php gestartet - und in der wird die .htaccess nochmals komplett abgearbeitet. Du stolperst also quasi erst im zweiten Anlauf über !Template.
Lösung ist, wie chrizz schon geschrieben hat, auf THE_REQUEST zurückzugreifen, diese Variable bleibt unverändert.

Davon unabhängig:

RewriteCond %{REQUEST_URI} sitemap.xml
RewriteRule ^(.*)$ index.php?showsitemap&%{QUERY_STRING} [L]

Das Muster ^(.*)$ ist hier sinnlos. .* greift auch ohne ^ und $ alles ab. Im Ziel benutzt du kein $1 und du gruppierst auch nichts, also sind die runden Klammern überflüssig. Und für "alles" reicht auch ein kurzes . (ein einzelner Punkt) als Muster.
Der Pfad wird von RewriteRule selbst auch geprüft, dafür musst du nicht auf RewriteCond und REQUEST_URI zurückgreifen (und in diesem Fall auch nicht THE_REQUEST).
Die URL-Parameter musst du nicht über %{QUERY_STRING} einfügen, dafür gibt es die Option QSA (hier: [L,QSA]).

Die Zeile RewriteRule sitemap\.xml index.php?showsitemap [L,QSA] sollte exakt das Gleiche machen wie deine Doppelzeile für sitemap.xml.

Beim !Template-Block verhält es sich wegen der Negierung etwas anders und dem nav-Parameter etwas anders, der sollte so aussehen:
RewriteCond %{THE_REQUEST} !Template
RewriteRule (.*) index.php?nav=$1 [QSA,L]

Verfasst:
von

Verfasst: 29.05.2009, 08:08
von silent321
Ich danke euch vielmals, es funktioniert einwandfrei und ich bin bezüglich Mod_Rewrite schlauer.

Dankeschön :D


[Edit] Nun habe ich an anderes, kleines Problem. Ich lasse eine PHP datei automatisch den Quellcode einer sitemap.xml Datei erzeugen und habe nun in der .htaccess mit mod_rewrite die URL so umgeschrieben dass in der url "example.com/sitemap.xml" erscheint und der richtige xml quelltext angezeigt wird, aber irgendwie wird das nicht direkt als xml erkannt anhand des quelltextes und der url.


Ich habe mal was davon gelesen in die .htaccess "AddType application/x-httpd-php .xml" mit reinzuschreiben, kann damit aber leider nichts genaues anfangen.


Normalerweise sollte das ganze wenn es im Browser aufgerufen wird so aussehen:

Bild

Allerdings sieht das ganze so aus, obwohl der Quelltext der gleiche ist und die url auch.

Bild

Wisst ihr woran es liegen könnte?

Verfasst: 31.05.2009, 10:09
von silent321
Ich habe leider immernoch keine Ahnung woran es liegen könnte. Würde mich riesig freuen wenn danach noch mal jemand schauen kann.

Viele Grüße

Verfasst: 31.05.2009, 11:16
von Mork vom Ork
silent321 hat geschrieben:Ich lasse eine PHP-Datei automatisch den Quellcode einer sitemap.xml-Datei erzeugen […], aber irgendwie wird das nicht direkt als xml erkannt anhand des quelltextes und der url.
Die Art der per HTTP übermittelten Daten wird vom Browser weder anhand der Daten (Ausnahme: IE) noch anhand der URL erkannt, sondern anhand dessen, was der Server dazu mitteilt.
Eine HTTP-Antwort besteht aus zwei Teilen, dem Kopf und den Daten. Im Kopf befinden sich Zusatzinformationen, unter anderem auch der Datentyp im Feld Content-Type - nur auf letzteres verlässt sich der Browser bei der Wahl der Anzeigeform.

Falls du Firefox benutzt, kannst du dir mit den Erweiterungen LiveHTTPHeaders (im Menü Extras) oder Firebug (unter Net) anschauen, was alles gesendet wird.

Möchtest du, dass deine vom PHP-Interpreter ausgegebenen XML-Daten vom Browser als XML erkannt werden, musst du, bevor du die eigentlichen Daten ausgibst, die Zeile header("Content-Type: text/xml"); einsetzen.

Verfasst: 31.05.2009, 12:13
von silent321
Hey super. Ich danke dir vielmals. Sehr Wissenswert und es funktioniert!

Dankeschön :)