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

Probelem mit Trailing Slash

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Faruq
PostRank 2
PostRank 2
Beiträge: 58
Registriert: 11.01.2009, 22:39

Beitrag von Faruq » 19.01.2009, 12:30

Hallo Leute

habe folgendes problem

ich bekomme es per htaccess nicht hin das am ende der url und in der url nur ein trailing slash angenommen wird und bei den anderen eine 301 oder eine 404 ausgegeben wird.

Beispiel:

Ist:
www.domain.de/verzeichnis/unterverzeichnis/seite//

Soll:
www.domain.de/verzeichnis/unterverzeichnis/seite/


die domain wird in verschieden varianten gezeigt egal wieviele slashes ich einbaue es wird immer der gleiche inhalt gezeigt

bitte um hilfe

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.


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

Beitrag von Mork vom Ork » 19.01.2009, 15:16

Faruq hat geschrieben:ich bekomme es per htaccess nicht hin das nur ein trailing slash angenommen wird
An die Schrägstriche ist nicht so leicht ranzukommen, da der Apache den angefragten Pfad säubert, bevor er ihn weiterverwendet. Der Weg führt über die Anfragezeile vom Browser, dort ist das Original noch vorhanden. Dummerweise bleibt das Original dort auch, so dass wir für jedes Schrägstrichpaket eine eigene externe Weiterleitung erzeugen müssen, und das dann wegen des notwendigen Musters auch noch einzeln für jeden Schrägstrich, der zu viel ist - aber so oft kommen solche fehlerhaften URLs ja nun auch nicht vor.

Code: Alles auswählen

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} " (.*)/{2,}(.*) "
RewriteRule "" %1/%2 [R=301]

Faruq
PostRank 2
PostRank 2
Beiträge: 58
Registriert: 11.01.2009, 22:39

Beitrag von Faruq » 20.01.2009, 10:48

danke bei mir hat es funktioniert

und zwar bei allen varianten

z.b.
https:///////www.domain.de//////verzeichnis////unterverzeichnis/////text////

so ist es dank dir
https://www.domain.de/verzeichnis/unter ... hnis/text/


könntest du mir das genauer erklären weil einfach einsetzen ist ja schön bringt mir aber leider kein lernerfolg

noch mal besonderen dank

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

Beitrag von Mork vom Ork » 20.01.2009, 20:54

Code: Alles auswählen

RewriteCond %{THE_REQUEST} " (.*)/{2,}(.*) "
RewriteRule "" %1/%2 [R=301]
Das Muster (.*)/{2,}(.*) passt auf jeden Text, in dem zwei oder mehr Schrägstriche vorkommen. Passt das Muster, werden vor und nach den Schrägstrichen sämtliche Zeichen eingesammelt (sämtliche Zeichen: .*, Einsammeln: () ). In einem Beispiel würde sich das so verteilen: abc///def.

Im Vorlagenziel werden die beiden runden Klammern bzw. ihr Inhalt wieder angesprochen, %1/%2, das, was die erste runde Klammer kopiert hat, landet anstelle von %1 im Ergebnis, entsprechend ersetzt die zweite Klammer %2.
Da sich die Schrägstriche nicht in einer runden Klammer befanden, werden sie auch nicht mitkopiert - nur logisch, schließlich wollen wir sie loswerden. Stattdessen steht zwischen %1 und %2 ein einzelner Schrägstrich.
Das ist im Wesentlichen der Mechanismus, mit dem erwünschte Teile aus dem Pfad rauskopiert und in eine Vorlage eingesetzt werden.

Den Grund dafür, dass das auf zwei Anweisungen verteilt ist, RewriteCond und RewriteRule, hatte ich schon beschrieben: Der Apache bereinigt den Pfad selbst, so dass RewriteRule, das nur den verarbeiteten Pfad zu sehen bekommt, keine mehrfachen Schrägstriche mehr anfindet.
RewriteCond hingegen hat über die Variable THE_REQUEST die Möglichkeit, noch direkt auf die vom Browser gesendete Befehlszeile und den in ihr enthaltenen, fehlerhaften Pfad zuzugreifen. Hier steckt auch der Grund für die beiden Leerzeichen vor und hinter (.*)/{2,}(.*), das Muster muss nicht auf den Pfad alleine passen, sondern auf den ganzen HTTP-Befehl (etwa „GET /abc///def HTTP/1.0“).

Faruq
PostRank 2
PostRank 2
Beiträge: 58
Registriert: 11.01.2009, 22:39

Beitrag von Faruq » 20.01.2009, 21:18

danke für die beschreibung habe es entlich verstanden

:D

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag