Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

zwei Conds, zwei Rules

Mehrere Domains, Domain-Umzug, neue Dateinamen, 301/302
Neues Thema Antworten
silent321
PostRank 3
PostRank 3
Beiträge: 73
Registriert: 13.01.2009, 17:39

Beitrag von silent321 » 28.05.2009, 15:33

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


Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

chrizz
PostRank 10
PostRank 10
Beiträge: 3044
Registriert: 05.07.2006, 10:37
Wohnort: Berlin

Beitrag von chrizz » 28.05.2009, 16:01

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...

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 28.05.2009, 16:50

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]