Seite 1 von 1

An die mod-rewrite Profis...

Verfasst: 21.03.2006, 09:59
von lloy
Hallo,

Evtl. kann ja jemand helfen. Ich habe folgende mod-rewrite Regel in meiner .htaccess:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^([^/]+)$ index.php?feld1=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^([^/]+)/(.*)$ index.php?feld1=$1&feld2=$2 [L]
Dabei wird eine URL nach dem dem Schema

www.domain.de/sektion/kategorie.html

auf die index.php umgeleitet, wobei sich "sektion" dann in $feld1 und "kategorie.html" in $feld2 befinden.
Das klappt auch alles wunderbar bis auf einen kleinen Fehler.

Auch bei der Eingabe von:

www.domain.de///sektion/////kategorie.html

steht "sektion" wieder in $feld1 und "kategorie.html" in $feld2, d.h.
ich kann beliebig viele "/" Slashes in die URL schreiben und bekomme das selbe Ergebnis wie bei einer korrekt geschriebenen URL.

Ich würde die mod-rewrite Regel nun gerne so ändern, dass der Inhalt von $feld1 und $feld2 sich genau an dem orientiert was nach dem ersten Slash der Domain und dem ersten Slash nach Sektion in der URL kommt. Das heisst beim zweiten Beispiel müsste der Inhalt von $feld1 "//sektion" und von $feld2 dann "////kategorie.html" lauten.

Ich hoffe das war verständlich und jemand weiss Rat!

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

An die mod-rewrite Profis...

Verfasst: 21.03.2006, 10:25
von fornex
Das ist eher problematisch, da der Server die Reihenfolge "/////" automatisch durch "/" ersetzt, bsp.:

https://www.abakus-internet-marketing.d ... //////////

Verfasst: 21.03.2006, 10:47
von lloy
Du hast Recht, das geht ja tatsächlich überall... :o
War mir noch nie aufgefallen.

Wenn man das mal unter dem Gesichtspunkt Duplicate-Content sieht, ist das ja auch eher bescheiden. Alle Welt macht sich über die Definition einer Standard-Domain Gedanken und dennoch müsste man nur einen Link auf www.domain.de///index.html setzen und schon wär die URL im Google-Index drin.

Oder filtert Google das raus?

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

Jetzt anfragen: 0511 / 300325-0.


An die mod-rewrite Profis...

Verfasst: 21.03.2006, 10:53
von fornex
Nein, das ist kein DC und Google filtert es aus:

Bsp:
https://www.google.com/search?hl=de&ie= ... =Suche&lr=

Verfasst: 21.03.2006, 10:56
von lloy
Alles klar, schönen Dank!

An die mod-rewrite Profis...

Verfasst: 21.03.2006, 14:13
von Caterham
Worin liegt der Sinn zuerst existierende Dateien auszuschließen und dann danach noch einmal die index.php? :o

Die Conditions, die auf existierende Dateien prüfen, ziehen übrigens die Performance nach unten. Wenn sowieso jeder Request auf .html endet, kann auch einfach die regEx angepasst werden.

Verfasst: 21.03.2006, 19:43
von lloy
Worin liegt der Sinn zuerst existierende Dateien auszuschließen und dann danach noch einmal die index.php? icon_eek.gif
@Caterham: Du meinst also, statt auf existierende Dateien zu prüfen, sollte ich eine Prüfung auf .html in die Conditions einfügen?

Und die Prüfung auf index.php kann mir sowieso sparen, weil es sich ja um eine existierende Datei handelt?

Interessanter Ansatz :D

Da muss ich mich wohl nochmal dahinterklemmen...
EDIT: Hast Du evtl. einen Ansatz für die Condition?

Diese müsste sowohl Requests nach dem Schema www.domain.de/sektion.html und
www.domain.de/sektion/kategorie.html
am besten sogar noch:
www.domain.de/sektion1/beliebig/viele/S ... gorie.html
"durchlassen", also die Rules auf solche anwenden.

An die mod-rewrite Profis...

Verfasst: 21.03.2006, 20:12
von Caterham
in die Conditions einfügen?
Nein, in die regEx der RewriteRule - wenn das denn zutreffen sollte, dass deine "vietuellen URLs" nur auf .html Enden.

Der Pattern der Rewriterule wird vor den Conditions geprüft - und nicht wie von vielen angenommen Condition --> RewriteRule.
Und die Prüfung auf index.php kann mir sowieso sparen, weil es sich ja um eine existierende Datei handelt?
Richtig.

Sollten also alle URLs auf .html enden und du nutzt keine .html-Dateien (die also physisch existieren), müsstest du

Code: Alles auswählen

RewriteEngine on
RewriteRule ^([^/]+\.html)$ index.php?feld1=$1 [L]
RewriteRule ^([^/]+)/(.*\.html)$ index.php?feld1=$1&feld2=$2 [L]
nutzen können.

grüße
Robert

Verfasst: 21.03.2006, 20:38
von lloy
Der Pattern der Rewriterule wird vor den Conditions geprüft - und nicht wie von vielen angenommen Condition --> RewriteRule.
Ich dachte tatsächlich, es wäre andersrum.

Mit dieser Condition
RewriteCond %{REQUEST_URI} ^(.*).html
scheint es übrigens auch zu funktionieren, wobei der der von Dir vorgeschlagene Weg eleganter (performanter?) sein dürfte.

Eine Frage noch:

Könnte man jetzt ohne viel Aufwand noch einbauen, dass auch URLs nach dem Schema
www.domain.de/sektion/kategorie/
also solche ohne die .html Endung umgeleitet werden ohne das existierende Files wie z.B. .gif betroffen sind?
Oder bliebe dann nur noch der Umweg, alles umzuleiten und einer Prüfung auf existierende Ordner/Dateien zu unterziehen?


Grüsse

Patrick

An die mod-rewrite Profis...

Verfasst: 21.03.2006, 21:16
von Caterham
scheint es übrigens auch zu funktionieren, wobei der der von Dir vorgeschlagene Weg eleganter (performanter?) sein dürfte.
ja, es macht ja wenig sinn, jeden Request die RewriteRule passieren zu lassen und dann erst in der Condition abzubrechen, statt gleich in der RewriteRule für den Abbruch zu sorgen.
Könnte man jetzt ohne viel Aufwand noch einbauen, dass auch URLs nach dem Schema
www.domain.de/sektion/kategorie/
Ja,

Code: Alles auswählen

RewriteEngine on
RewriteRule ^([^/]+(\.html|/))$ index.php?feld1=$1 [L]
RewriteRule ^([^/]+)/(.*(\.html|/))$ index.php?feld1=$1&feld2=$2 [L]
Was wäre z.B. mit solch einer Condition:
Bräuchtest du bei ".html" oder / am Ende mit der Regel auch nicht.
solltest du existierende Verzeichnisse im Direktaufruf haben, bspw. /admin/, so würde ich diese einzeln ausschließen, da die Anzahl doch meist überschaubar ist

Code: Alles auswählen

RewriteEngine on

Rewriterule ^ichExistiere - [L]
# oder mehrere
# Rewriterule ^(ichExistiere|undIchAuch) - [L]
RewriteRule ^([^/]+(\.html|/))$ index.php?feld1=$1 [L]
RewriteRule ^([^/]+)/(.*(\.html|/))$ index.php?feld1=$1&feld2=$2 [L]
Grüße
Robert

Verfasst: 21.03.2006, 21:22
von lloy
Klasse, Dank Dir Caterham!