Zur Navigation

String abschneiden bzw. weiterleiten

1 Jana

Hallo Jörg!
Ich bins mal wieder.
Diese Anhängsel (variable Buchstabenkombinationen) sollen abgeschnitten werden:
www.domain.de/verzeichnis1/verzeichnis2/verzeichnis3/xyzundwasweissichwas
Ergebnis:
www.domain.de/verzeichnis1/verzeichnis2/verzeichnis3/

Genauso diese Geschichte:
www.domain.de/xyzundwasweissichwas
soll nach
www.domain.de/verzeichnis1/verzeichnis2/verzeichnis3/
weitergeleitet werden.

Ist doch ganz einfach, stimmts? Aber ich verstehs nicht! Habs mit ".+" versucht, mit "(.*)" usw.
Für dich sicherlich wieder ein Klacks.
Vielen lieben Dank im voraus
Jana

15.09.2018 09:18

2 Jörg Kruse

Also alle URLs, die auf /xyzundwasweissichwas enden, sollen nach www.domain.de/verzeichnis1/verzeichnis2/verzeichnis3/ weitergeleitet werden?

mit mod_rewrite:

RewriteRule ^(.+/)?xyzundwasweissichwas$ http://www.example.com/verzeichnis1/verzeichnis2/verzeichnis3/ [L,R=301]

Das Fragezeichen hinter (.+/) besagt, dass diese Zeichenfolge vorkommen kann, aber nicht muss, so dass auch www.example.com/xyzundwasweissichwas weitergeleitet wird

15.09.2018 11:28

3 Jana

Sorry, da habe ich mich wahrscheinlich missverständlich ausgedrückt.
"xyzundwasweissichwas" soll eigentlich für eine variable Zeichenfolge stehen.
Also:
www.domain.de/verzeichnis1/verzeichnis2/verzeichnis3/undwas
oder
www.domain.de/verzeichnis1/verzeichnis2/verzeichnis3/xyz
oder
www.domain.de/verzeichnis1/verzeichnis2/verzeichnis3/weissich
usw.
sollen nach
www.domain.de/verzeichnis1/verzeichnis2/verzeichnis3/
weitergeleitet bzw. im Grunde einfach abgeschnitten / gekürzt werden.

So auch:
www.domain.de/undwas
oder
www.domain.de/uu
oder
www.domain.de/xxxxxx
sollen abgeschnitten / gekürzt und nach
www.domain.de/verzeichnis1/verzeichnis2/verzeichnis3/
weitergeleitet werden.

Danke im voraus und LG
Jana


15.09.2018 17:21

4 Jörg Kruse

"xyzundwasweissichwas" soll eigentlich für eine variable Zeichenfolge stehen

Allzu variabel sollte sie wohl aber besser nicht sein - "robots.txt" beispielsweise möchtest du vermutlich nicht weiterleiten? Besser wäre vielleicht eine Zeichenkette ohne Punkt und Slash? diese lässt sich durch den Ausdruck [^\./]+ erfassen:

RewriteRule ^(verzeichnis1/verzeichnis2/verzeichnis3/)?[^\./]+$ http://www.example.com/verzeichnis1/verzeichnis2/verzeichnis3/ [L,R=301]

Du kannst die Zeichenfolge aber auch noch enger definieren, z.B. nur aus Kleinbuchstaben bestehend:

RewriteRule ^(verzeichnis1/verzeichnis2/verzeichnis3/)?[a-z]+$ http://www.example.com/verzeichnis1/verzeichnis2/verzeichnis3/ [L,R=301]

16.09.2018 19:55 | geändert: 16.09.2018 19:57

5 Jana

Guten Agend Jörg, vielen Dank!
Allzu variabel sollte sie wohl aber besser nicht sein
Nein, deswegen habe ich auch bewusst nur Beispiele mit lauter Kleinbuchstaben genannt ;-)

Die Weiterleitung funktioniert hier bei mir kurioserweise nur wenn
http://www.example.com/xxx
zu
http://www.example.com/verzeichnis
aber nicht wenn
http://www.example.com/verzeichnis1/verzeichnis2/verzeichnis3/xxx
nach
http://www.example.com/verzeichnis1/verzeichnis2/verzeichnis3/
also das xxx nur abgeschnitten werden soll

Was kann das sein? Sind das zwei verschiedene Sachverhalte?
Danke und LG
Jana

16.09.2018 20:40

6 Jörg Kruse

Die Rule sollte für beide Pfade gelten, das (verzeichnis1/verzeichnis2/verzeichnis3/) ist wegen des folgenden ? optional

Der Verzeichnis-Pfad stimmt genau überein?

Wurde der Browser-Cache zwischendurch geleert?

Gibt es noch andere Rules in der .htaccess Datei, die hier dazwischenfunken könnten?

16.09.2018 21:59

7 Jana

Pfade stimmen, Browser-Cache leere ich dauernd zwischendurch (wollte ich vorhin schon schreiben), andere Regeln in der .htaccess kann ich nicht finden...
Bin ratlos ;-(

16.09.2018 22:24

8 Jörg Kruse

Also enthält die .htaccess Datei sonst nichts?

Gibt es .htaccess Dateien in den relevanten Unterzeichnissen?

Verwendest du eine RewriteBase Angabe? wenn nein, dann bau die mal ein:

RewriteBase /

17.09.2018 10:35 | geändert: 17.09.2018 10:35

9 Jana

Danke für deine Rückmeldung.
Aber auch die RewriteBase / schafft keine Abhilfe.

Aufgrund deines guten Hinweises
.htaccess Dateien in den relevanten Unterzeichnissen
habe ich mir die .htaccess im Unterverzeichnis /blog/ des infragekommenden WordPress-Blogs angesehen:
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteRule ^(.*)$ http://www.example.com/blog/$1 [R=301,L]

RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
Da ist m.M.n. nichts relevantes dabei, oder?
Danke und LG
Jana

17.09.2018 11:42

10 Jörg Kruse

Entspricht /blog/ dann dem /verzeichnis1/ in den Beispielen zuvor?

mod_rewrite führt nur den Code der .htaccess Datei aus, welche im selben bzw. nächsthöchsten Verzeichnis liegt, in dem Fall /blog/.htaccess. Deswegen muss der Weiterleitungs-Code auch dort noch einmal eingebaut werden.

Der Pfad muss natürlich noch um die RewriteBase gekürzt werden, die ich der Übersichtshalber direkt unterhalb der RewriteEngine Direktive platzieren würde.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/

RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteRule ^(.*)$ http://www.example.com/blog/$1 [R=301,L]

RewriteRule ^verzeichnis2/verzeichnis3/[a-z]+$ http://www.example.com/blog/verzeichnis2/verzeichnis3/ [L,R=301]

# WordPress-Code
</IfModule>

17.09.2018 14:08