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

An die mod-rewrite Profis...

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
lloy
PostRank 7
PostRank 7
Beiträge: 638
Registriert: 23.08.2005, 17:19

Beitrag von lloy » 21.03.2006, 09:59

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!

Anzeige von ABAKUS

von Anzeige von ABAKUS »

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

fornex
PostRank 4
PostRank 4
Beiträge: 154
Registriert: 01.03.2006, 01:14
Wohnort: :tronhoW

Beitrag von fornex » 21.03.2006, 10:25

Das ist eher problematisch, da der Server die Reihenfolge "/////" automatisch durch "/" ersetzt, bsp.:

https://www.abakus-internet-marketing.d ... //////////
Suche Linkpartner für Bereiche:
Flirt - Fun - Erotik - 1 Click Hoster

ICQ: 7o7727

Googlebot versteht Javascript

lloy
PostRank 7
PostRank 7
Beiträge: 638
Registriert: 23.08.2005, 17:19

Beitrag von lloy » 21.03.2006, 10:47

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?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

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

Jetzt anfragen: 0511 / 300325-0.


fornex
PostRank 4
PostRank 4
Beiträge: 154
Registriert: 01.03.2006, 01:14
Wohnort: :tronhoW

Beitrag von fornex » 21.03.2006, 10:53

Nein, das ist kein DC und Google filtert es aus:

Bsp:
https://www.google.com/search?hl=de&ie= ... =Suche&lr=
Suche Linkpartner für Bereiche:
Flirt - Fun - Erotik - 1 Click Hoster

ICQ: 7o7727

Googlebot versteht Javascript

lloy
PostRank 7
PostRank 7
Beiträge: 638
Registriert: 23.08.2005, 17:19

Beitrag von lloy » 21.03.2006, 10:56

Alles klar, schönen Dank!

Caterham
PostRank 5
PostRank 5
Beiträge: 329
Registriert: 20.09.2004, 19:12

Beitrag von Caterham » 21.03.2006, 14:13

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.

lloy
PostRank 7
PostRank 7
Beiträge: 638
Registriert: 23.08.2005, 17:19

Beitrag von lloy » 21.03.2006, 19:43

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.

Caterham
PostRank 5
PostRank 5
Beiträge: 329
Registriert: 20.09.2004, 19:12

Beitrag von Caterham » 21.03.2006, 20:12

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

lloy
PostRank 7
PostRank 7
Beiträge: 638
Registriert: 23.08.2005, 17:19

Beitrag von lloy » 21.03.2006, 20:38

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

Caterham
PostRank 5
PostRank 5
Beiträge: 329
Registriert: 20.09.2004, 19:12

Beitrag von Caterham » 21.03.2006, 21:16

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

lloy
PostRank 7
PostRank 7
Beiträge: 638
Registriert: 23.08.2005, 17:19

Beitrag von lloy » 21.03.2006, 21:22

Klasse, Dank Dir Caterham!

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag