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

modrewite regel - was ist hier falsch ?

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
tango
PostRank 2
PostRank 2
Beiträge: 41
Registriert: 16.04.2006, 19:14
Wohnort: Essen

Beitrag von tango » 06.10.2006, 21:05

Code: Alles auswählen

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.deineseite.de$
RewriteRule ^(.*)$ http://www.deineseite.de/$1 [L,R=301]

RewriteCond %{THE_REQUEST} modules.php?name=Downloads HTTP
RewriteRule ^.*$ http://www.deineseite.de/index.php [R=301,L]
bekommen einen Internal Server Error :-?

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

haha
PostRank 9
PostRank 9
Beiträge: 1065
Registriert: 03.04.2006, 18:08
Wohnort: Bi Hamborg

Beitrag von haha » 07.10.2006, 11:17

tango hat geschrieben:bekommen einen Internal Server Error :-?
Ein genauerer Grund steht immer im Fehlerprotokoll des Webservers, die Meldung im Browser dient nur zur allgemeinen Information der Besucher.

tango
PostRank 2
PostRank 2
Beiträge: 41
Registriert: 16.04.2006, 19:14
Wohnort: Essen

Beitrag von tango » 07.10.2006, 14:34

Fehlermeldung:
RewriteCond: bad flag delimiters

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.


DDHS
PostRank 6
PostRank 6
Beiträge: 470
Registriert: 04.01.2006, 22:22

Beitrag von DDHS » 07.10.2006, 16:45

Was möchtest du denn damit erreichen? Ergibt für mich auf die schnelle keinen Sinn.
Sag bescheid, was du machen willst und es wird dir sicherlich geholfen.

Gruß DD

tango
PostRank 2
PostRank 2
Beiträge: 41
Registriert: 16.04.2006, 19:14
Wohnort: Essen

Beitrag von tango » 07.10.2006, 16:53

Es sollen alle Seiten wo ein "modules.php?name=Downloads" in Link vorkommt auf die index.php umgeleitet werden. Diese Seiten sollen aus dem INDEX bei Google verschwinden. Ziel ist es DC zu vermeiden.

haha
PostRank 9
PostRank 9
Beiträge: 1065
Registriert: 03.04.2006, 18:08
Wohnort: Bi Hamborg

Beitrag von haha » 07.10.2006, 17:36

tango hat geschrieben:Fehlermeldung:
RewriteCond: bad flag delimiters
Dann schau Dir Deine beiden RewriteCond-Zeilen nochmal an und vergleiche sie mit der Vorgabe in der Apache-Anleitung. Achte insbesondere darauf, mit welchem Zeichen einzelne Argumente bei Apache-Konfigurationsanweisungen voneinander getrennt werden und überlege Dir, was passiert, wenn ein Argument ausgerechnet dieses Zeichen enthält. Die Optionen (Flags) werden als drittes Argument erwartet, zähle vielleicht auch einfach ab, welches Argument das Dritte ist.

Davon abgesehen:

- Sofern index.php die Standardseite für Verzeichnisse ist, möchtest Du nicht zu einer index.php weiterleiten, sondern stattdessen die URL einfach am Schrägstrich enden lassen.

- Es ist etwas unüblich, erst mit RewriteCond die ganze HTTP-Anfrage zum Vergleich heranzuziehen und dann "alle" URLs (".*") mit RewriteRule umzuleiten.
Nicht, dass das nicht ginge, aber URL-Parameter lassen sich auch mit der RewriteCond-Variablen QUERY_STRING abfragen, der URL-Pfad gehört dann in das RewriteRule-Muster.

- Wenn Seiten aus dem Index verschwinden sollen, dann liefere besser einen 404- oder 410-Fehler aus, keine Weiterleitung.

tango
PostRank 2
PostRank 2
Beiträge: 41
Registriert: 16.04.2006, 19:14
Wohnort: Essen

Beitrag von tango » 08.10.2006, 16:56

puuuuuuh, das ist aber viel stoff :oops:

wie wäre es damit:
RewriteCond %{HTTP_HOST} !^domain\.de/modules.php?name=Downloads
RewriteRule ^(.*) https://www.domain.de/index.php [L,R=301]


Leider bekomme ich hier eine Weiterleitung auf eine Weiterleitung :-?

Folgendes steht noch in der .htacess:

RewriteRule ^index.html index.php
RewriteRule ^gate.* modules.php

DDHS
PostRank 6
PostRank 6
Beiträge: 470
Registriert: 04.01.2006, 22:22

Beitrag von DDHS » 08.10.2006, 18:27

RewriteRule ^index.php$ modules.php?name=Downloads

grundsätzlich wird das so gemacht, allerdings kann ich dir da auch nicht genau helfen, da ich dazu wissen müsste, was für URLs es gibt.

Gruß DD

tango
PostRank 2
PostRank 2
Beiträge: 41
Registriert: 16.04.2006, 19:14
Wohnort: Essen

Beitrag von tango » 08.10.2006, 20:37

Die Links sind so aufgebaut: modules.php?name=Downloadsxxxxxxxxxxx

Wichtig ist sobald diese Zeichenfolge "modules.php?name=Downloads" vorkommt soll nach index.php umgeleitet werden

haha
PostRank 9
PostRank 9
Beiträge: 1065
Registriert: 03.04.2006, 18:08
Wohnort: Bi Hamborg

Beitrag von haha » 09.10.2006, 12:00

tango hat geschrieben:RewriteCond %{HTTP_HOST} !^domain\.de/modules.php?name=Downloads
RewriteRule ^(.*) https://www.domain.de/index.php [L,R=301]

Leider bekomme ich hier eine Weiterleitung auf eine Weiterleitung :-?
Das ist kein Wunder. In HTTP_HOST steht der Hostname des Webservers, meinetwegen "heise.de" oder "example.com". Du hast eine ganze URL reingepackt und mittels ! vor dem Muster RewriteCond angewiesen, aktiv zu werden, wenn HTTP_HOST nicht dieser URL entspricht - was immer zutrifft, weil in HTTP_HOST überhaupt keine URLs abgelegt werden. Ergebnis: Alles wird umgeleitet.

Dein Fehler liegt in der zweiten RewriteCond-Zeile:

RewriteCond %{THE_REQUEST} modules.php?name=Downloads HTTP

In Konfigurationsanweisungen werden einzelne Argumente mit einem (oder mehreren) Leerzeichen getrennt. Schaust Du Dir die Zeile mal an, wirst Du feststellen, dass Du da drei Argumente drin hast:

1. %{THE_REQUEST}
2. modules.php?name=Downloads
3. HTTP

RewriteCond akzeptiert als drittes Argument eine Handvoll Optionen in eckigen Klammern. "HTTP" sitzt nicht in eckigen Klammern, was zur Fehlermeldung "bad flag delimiters", "falsche Optionsbegrenzungen" führt. Und obendrein ist "HTTP" keine Option.
Richtig wäre gewesen, das zweite Argument, welches Leerzeichen enthält, in Anführungszeichen zu setzen:

RewriteCond %{THE_REQUEST} "modules.php?name=Downloads HTTP"

Die aus bereits genannten Gründen IMHO so ziemlich ganz korrekte Art und Weise sollte hingegen diese sein:

RewriteCond %{QUERY_STRING} (^|&;)name=Downloads
RewriteRule ^modules\.php$ https://www.deineseite.de/ [R=301,L]


Mittels RewriteCond werden nur die URL-Parameter (alles hinter dem Fragezeichen) auf ein Vorkommen von "name=Downloads" geprüft, bei Zutreffen wird anschließend der URL-Pfad "modules.php" Richtung Wurzelverzeichnis weitergeleitet (ohne die überflüssige index.php-Angabe).

Da das Ganze in einer .htaccess untergebracht ist, gehört noch die Zeile

RewriteBase /

unter RewriteEngine on (RewriteBase gibt das Verzeichnis an, in der die betreffene .htaccess liegt, in diesem Fall das Wurzelverzeichnis).

tango
PostRank 2
PostRank 2
Beiträge: 41
Registriert: 16.04.2006, 19:14
Wohnort: Essen

Beitrag von tango » 10.10.2006, 22:59

Hi,
vielen Dank für deine ausführliche Antwort. Ich habe es am Anfang mit %{QUERY_STRING} versucht.
Es wurde mir dann zum Anderen geraten warum auch immer. Leider funktioniert die Regel noch nicht. Es wird zwar auf die index.php geleitet aber im Browser steht:

h**p://www.deinseite.de/?name=Downloads

Was bedeutet "&;" ? Ich habe es in der Syntax von mod_rewrite nicht gefunden.

haha
PostRank 9
PostRank 9
Beiträge: 1065
Registriert: 03.04.2006, 18:08
Wohnort: Bi Hamborg

Beitrag von haha » 11.10.2006, 10:20

tango hat geschrieben:Es wird zwar auf die index.php geleitet aber im Browser steht: h**p://www.deinseite.de/?name=Downloads
Hänge noch ein Fragezeichen an die Ziel-URL an, dann sollte der Parameterteil verschwinden.
Was bedeutet "&;"? Ich habe es in der Syntax von mod_rewrite nicht gefunden.
Da habe ich auch noch einen Fehler gemacht, &; muss in eckige Klammern gesetzt werden - war wohl nicht mein Tag.

(^|[&;])name= bedeutet "Textanfang (^), oder (|) ein Und oder Semikolon ([&;]), dann folgt der Text name=. Die runde Klammer klammert den Oder-Ausdruck, begrenzt ihn also auf die Wahl zwischen ^ und [&;]. Die eckige Klammer steht für exakt ein Zeichen aus der in ihr enthaltenen Auswahl (hier: Und und Semikolon). Das Dach steht für überhaupt kein Zeichen, an dieser Stelle muss der Text beginnen.

Dieses Muster passt auf alle Texte, die entweder mit name= beginnen (^name=) oder in denen name= auf ein Und oder Semikolon folgt (&name= oder ;name=).
Wie Du sicherlich weißt, werden einzelne Parameter in URLs durch ein Und oder Semikolon getrennt. Mit diesem Muster kannst Du daher auf jedes Vorkommen des Parameters name prüfen, und zwar egal wo in der Parameterkette er steht und - das ist der Witz an dem führenden ^|[&;] - ohne dabei über Parameter zu stolpern, die lediglich auf name enden, zB vorname, nachname oder dergleichen.
Das Muster würde auf name=bla, test=1&name=bla oder ;name=bla passen, nicht jedoch auf vorname=bla oder test=2;nachname=bla.

Das Ganze nennt sich regulärer Ausdruck. Die Dinger werden Dir an Stellen, wo Zeichenketten auf Übereinstimmung mit einem bestimmten Muster überprüft werden sollen, sehr häufig begegnen, sogar in der Suchfunktion einiger Texteditoren bzw. Textverarbeitungen, daher sind sie in der Apache-Anleitung auch nur ansatzweise erklärt.
Das Grundprinzip wird in einem Wikipedia-Artikel ganz vernünftig erklärt. Es gibt eine Funktionsbibliothek namens PCRE, die für die Auswertung dieser Muster fast immer zum Einsatz kommt und auch vom Apache verwendet wird. PCRE-Muster bieten noch eine Reihe weiterer Möglichkeiten.

Im Ganzen sollte Dein Muster also so aussehen:

RewriteCond %{QUERY_STRING} (^|[&;])name=Downloads
RewriteRule ^modules\.php$ httр://example.com/? [R=301,L]


(Ich hab's diesmal ausprobiert, bei mir funktioniert es.)

tango
PostRank 2
PostRank 2
Beiträge: 41
Registriert: 16.04.2006, 19:14
Wohnort: Essen

Beitrag von tango » 11.10.2006, 17:58

Also bei mir funktioniert diese Regel nicht.
Ich habe sie jetzt so abgeändert damit es läuft:

RewriteCond %{QUERY_STRING} (^|[&;])name=Downloads
RewriteRule ^modules\.php$ index.php? [R=301,L]

Ich habe jetzt aber das Problem daß alle Seiten aus dem Modul auf index.php umgeleitet werden :-?
Die Regel müsste ergänzt werden und zwar so dass sie nur auf externe Links zutrifft. Werden Links von meiner Domain aufgerufen darf diese Regel nicht greifen da 300 gleiche Index-Seiten auf die Dauer ziemlich langweilig sind :D

Also doch zusätzlich mit RewriteCond %{HTTP_HOST} ??

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag