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

knifflige HTACCESS-Aufgabe

Mehrere Domains, Domain-Umzug, neue Dateinamen, 301/302
Neues Thema Antworten
Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 05.01.2011, 03:31

Hallo,

ich bin mal gespannt, ob folgendes per .htaccess realisierbar ist.

Und zwar möchte ich eine ganze Reihe von "bestimmten" Unterseiten-Seiten auf ein neues Verzeichnis umleiten. Also nur einen Teil, nicht alle!

/file.php?page=1 nach /newpath/file.php?page=1
/file.php?page=5 nach /newpath/file.php?page=5
/file.php?page=12 nach /newpath/file.php?page=12
/file.php?page=37 nach /newpath/file.php?page=37
/file.php?page=2507 nach /newpath/file.php?page=2507

Folgendes funktioniert schonmal nicht, denn die Variablen werden offenbar nicht berücksichtigt:

Code: Alles auswählen

Redirect /file.php?page=1 http://domain.tld/newpath/file.php?page=1
Außerdem müsste ich dann 2000 Redirect-Zeilen anlegen. Kann man nicht eine Art Array schreiben... mit (1, 5, 12, 37, ...)?

Für eine Lösung wäre ich sehr dankbar.

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.


columbus0815
PostRank 3
PostRank 3
Beiträge: 74
Registriert: 14.12.2010, 17:09

Beitrag von columbus0815 » 05.01.2011, 09:08

Für jede Seite welche du Umleiten möchtest dieses:

RewriteCond %{THE_REQUEST} " /file\.php\?page=1 "
RewriteRule ^file\.php$ https://www.domain.tld/newpath/file.php?page=1 [R=301,L]

in die .htaccess einfügen.

Bezüglich des Array kann ich dir jedoch aktuell nicht weiterhelfen.

Lord Pixel
PostRank 7
PostRank 7
Beiträge: 601
Registriert: 24.08.2007, 17:06

Beitrag von Lord Pixel » 05.01.2011, 09:43

Möchtest du, dass intern eine andere Datei aufgerufen wird (und der Benutzer nichts mitbekommt), oder dass Besucher auf die neue URL umgeleitet werden?

Anna Bolika
PostRank 2
PostRank 2
Beiträge: 44
Registriert: 22.08.2008, 07:44

Beitrag von Anna Bolika » 05.01.2011, 10:23

Mit der genauen Sytax der htaccess muss ich mich jedesmal auch neu auseinanderstetzen. Bezüglich deines Wunsches mit dem Array hätte ich folgende Lösung. Dabei greife ich auf den Vorschlag von columbus0815 zurück und modifiziere ihn:

RewriteCond %{THE_REQUEST} " /file\.php\?page=(1|5|12|37)$ "
RewriteRule ^file\.php$ https://www.domain.tld/newpath/file.php?page=$1 [R=301,L]

Etwas in dieser Richtung müsste funktionieren. So wirst du zwar trotzdem nicht alle 2000 Redirects in eine Zeile schreiben, aber selbst wenn du nur 10-20 IDs in eine Zeile kriegst, wird deine Datei dadurch sehr viel übersichtlicher.

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 05.01.2011, 12:50

columbus0815 hat geschrieben:RewriteCond %{THE_REQUEST} " /file\.php\?page=1 "
RewriteRule ^file\.php$ https://www.domain.tld/newpath/file.php?page=1 [R=301,L]
Danke. Nachdem ich die "" entfernt hatte, ging es. Jedoch scheint es nicht strikt zu handhaben, denn...

Code: Alles auswählen

RewriteCond %{THE_REQUEST} /file\.php\?page=1
RewriteRule ^file\.php$ http://www.domain.tld/newpath/file.php?page=1  [R=301,L]
..leitet auch Page 12, 13, 125, 1875 um.

Anna Bolika hat geschrieben:RewriteCond %{THE_REQUEST} /file\.php\?page=(1|5|12|37)$
RewriteRule ^file\.php$ https://www.domain.tld/newpath/file.php?page=$1 [R=301,L]
Auch dir ein Danke, doch der Array funktioniert leider gar nicht. :-(

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 05.01.2011, 13:02

..leitet auch Page 12, 13, 125, 1875 um.
Dann mach hinter die 1 ein $ (Ende der Zeichenkette). Anna Bolika hatte das drinnen.

Ansonsten ist bei Anna Bolika schon ein Fehler enthalten. Es darf nicht $1 heißen, sondern muss %1 sein, denn es greift auf den Pattern der Cond zurück.
doch der Array funktioniert leider gar nicht.
"gar nicht" bedeutet was genau?

https://httpsd.apache.org/docs/2.0/mod/ ... ewriterule

Code: Alles auswählen

Text:
  .           Any single character
  [chars]     Character class: Any character of the class ``chars''
  [^chars]    Character class: Not a character of the class ``chars''
  text1|text2 Alternative: text1 or text2

Grouping:
  (text)      Grouping of text
              (used either to set the borders of an alternative as above, or
              to make backreferences, where the Nth group can
              be referred to on the RHS of a RewriteRule as $N)

Anchors:
  ^           Start-of-line anchor
  $           End-of-line anchor
Edit: Wobei .... THE_REQUEST warum denn das???
THE_REQUEST
The full HTTP request line sent by the browser to the server (e.g., "GET /index.html HTTP/1.1"). This does not include any additional headers sent by the browser.
Nimm QUERY_STRING

->

RewriteCond %{QUERY_STRING} ^page=(1|5|12|37)$
Zuletzt geändert von Synonym am 05.01.2011, 13:12, insgesamt 3-mal geändert.

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 05.01.2011, 13:05

Lord Pixel hat geschrieben:Möchtest du, dass intern eine andere Datei aufgerufen wird (und der Benutzer nichts mitbekommt), oder dass Besucher auf die neue URL umgeleitet werden?
Ich möchte eine richtige Umleitung, so dass der Nutzer die Umleitung auch in der Adresszeile sieht.

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 05.01.2011, 13:29

Synonym hat geschrieben: Nimm QUERY_STRING

RewriteCond %{QUERY_STRING} ^page=(1|5|12|37)$
Danke, das hat geholfen. Jetzt nimmt er es auch strikt und löst somit das andere Problem. Das "$" am Ende hat es nämlich nicht behoben.

Danke & Gruß

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 05.01.2011, 14:18

Das "$" am Ende hat es nämlich nicht behoben.
Daher auch mein Edit und das Zitat bezüglich dem THE_REQUEST oben (hatte es zuvor überlesen):
"(e.g., "GET /index.html HTTP/1.1")."

THE_REQUEST beinhaltet auch immer den Protokoll-Standard, also hört der String quasi nie mit der ID von Dir auf. Bei THE_REQUEST müsste man dann also noch beachten, dass nach der ID ein Leerzeichen und dann eben HTTP kommt. Aber warum so umständlich (weiß nicht, warum das immer wieder genommen wird), QUERY_STRING tut genau das was Du wolltest, nämlich den "Querystring" beachten ;-)

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 05.01.2011, 14:35

Synonym hat geschrieben:Daher auch mein Edit und das Zitat bezüglich dem THE_REQUEST oben
Danke, das habe ich dank deines Edits dann noch hinbekommen. Super!

Ich habe noch eine neue Frage...

Und zwar möchte ich ALLE Aufrufe innerhalb eines alten Verzeichnisses auf die Startseite umleiten.

Ich habe jetzt folgendes im Einsatz:

Code: Alles auswählen

RewriteRule ^altesverzeichnis(.*)$  http://www.domain.de/ [R=301,L]
Das klappt auch...

domain.de/altesverzeichnis/ --> domain.de/
domain.de/altesverzeichnis/test.php --> domain.de/
domain.de/altesverzeichnis/unterverzeichnis/test.php --> domain.de/

Nur sobald Strings mit übergeben werden, sieht das so aus...

domain.de/altesverzeichnis/test.php?var=xyz --> domain.de/?var=xyz

Wie kann ich das verhindern?

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 05.01.2011, 14:42

Also der Querystring soll da dann nicht mit dabei sein, oder wie?

Wenn ja, dann:
RewriteRule ^altesverzeichnis(.*)$ https://www.domain.de/? [R=301,L]

Beachte das ? am Ende der Zielseite. Durch das werden alle übergebenen Querystrings entfernt.

Guggst Du hier, zweite Beispiel:
https://wiki.apache.org/httpsd/RewriteQueryString

Und auch hier ein Edit:

Die Klammern () brauchst Du eigentlich nicht, da der Wert ja nicht weiter verwendet wird.

Das .* in Verbindung mit $ ist auch überflüssig. Irgendwelche Zeichen mit einem Ende. Das ist sinnfrei.

RewriteRule ^altesverzeichnis/ https://www.domain.de/? [R=301,L]
Sollte ausreichen um das Verzeichnis, alle Unterverzeichnisse und Dateien weiterzuleiten.

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 05.01.2011, 15:03

Super, super, super.... DANKE! :-)

Markus_S
PostRank 2
PostRank 2
Beiträge: 57
Registriert: 17.04.2007, 23:58

Beitrag von Markus_S » 07.01.2011, 07:19

Noch einen Nachtrag...

Jetzt habe ich eine Weiterleitung mit einem Umlaut in der Zieladresse. Leider wird der Umlaut falsch dargestellt...

RewriteCond %{QUERY_STRING} ^string123$
RewriteRule ^alteseite\.php$ https://www.domain.de/neueseite.php?s=schlüssel [R=301,L]

Die Weiterleitung in der Adresszeile sieht dann leider so aus:

https://www.domain.de/neueseite.php?s=schl%fcssel

Was muss ich tun, damit die Umlaute korrekt angezeigt werden?

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 07.01.2011, 08:57

Was muss ich tun, damit die Umlaute korrekt angezeigt werden?
Was ist bei Dir denn "korrekt"?

ü gibt es so gesehen nicht
%fc ist die Version aus dem ISO-Zeichensatz
%c3%bc wäre die aus dem utf-8-Zeichensatz

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag