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

mod_rewrite Problem

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Dracul
PostRank 1
PostRank 1
Beiträge: 8
Registriert: 29.09.2006, 21:52

Beitrag von Dracul » 12.10.2007, 23:57

Hallo,

haben Sie es mal mit $ anstatt % probiert? Da ein zugreifen auf die in (.*) geforderte Variable meines wissens nur über $1 $2 ... geschieht.

MfG

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.


w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 13.10.2007, 02:17

Dracul hat geschrieben:Hallo,

haben Sie es mal mit $ anstatt % probiert? Da ein zugreifen auf die in (.*) geforderte Variable meines wissens nur über $1 $2 ... geschieht.

MfG
Jetzt versteh ich gar nichts mehr! Wenn ich $1 eingebe dann wandelt er mir dir Datei in folgende um:
https://w3news.de/news/artikelartikel.php.html :-?

Code: Alles auswählen

RewriteEngine On
RewriteCond %{HTTP_HOST} !^w3news\.de$ [NC]
RewriteRule ^(.*)$ http://w3news.de/news/$1 [L,R=301]

RewriteCond %{QUERY_STRING} ^id=(.*)$ 
RewriteRule ^(.*) http://w3news.de/news/artikel$1.html? [L,R=301]

RewriteRule ^index.php$ /news/ [R=301,L]
RewriteRule ^artikel911.html$ /news/artikel910.html [R=301,L]
RewriteRule ^artikel([0-9]+).html$ /news/artikel.php?id=$1
RewriteRule ^(.*)_(.*).html$ artikel.php?titel=$1&id=$2

RewriteRule ^bereich-(.*).html$ /news/index.php?bereich=$1

RewriteRule ^archiv/([0-9]+)/([A-Za-z]+)/$ archiv_monat.php?jahr=$1&monat=$2
RewriteRule ^archiv/([0-9]+)/([A-Za-z]+)/(.*)/$ archiv_tag.php?jahr=$1&monat=$2&tag_archiv=$3

RewriteRule ^(.*).html$ $1.php
MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 13.10.2007, 18:49

Ich bins nochmal, hab den Fehler gefunden, kann ihn aber nicht beheben! :-?

Das ist der momentane Code:

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ 
RewriteRule ^(.*) http://w3news.de/news/artikel%1.html [L,R=301]
Jetzt passiert folgendes, bei Aufruf der Datei:
https://w3news.de/news/artikel.php?id=300
Wird weitergeleitet auf die Datei:
https://w3news.de/news/artikel300.html?id=300

Und das bedeutet Endlosschleife und ich muss es nur irgendwie hinbekommen, dass bei der html Datei das id abgeschnitten, aber wie nur?
MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

matin
PostRank 9
PostRank 9
Beiträge: 1427
Registriert: 08.09.2005, 15:16
Wohnort: Grünburg

Beitrag von matin » 13.10.2007, 19:05

versuch ein ? hinter .html, dann sollte die id hinten weg sein

Code: Alles auswählen


RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^(.*) http://w3news.de/news/artikel%1.html? [L,R=301]
https://suchmaschinentricks.at/ - Ziehen Sie die Aufmerksamkeit im Internet auf sich ...
Kaufe verschiedene Projekte mit entsprechendem Content - Kontaktaufnahme per PN

w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 13.10.2007, 19:18

Da kommt auch ne Endlosschleife, allerdings kann ich nicht sagen, welche Datei da aufgerufen wird, weil ich es nicht sehe.
MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

matin
PostRank 9
PostRank 9
Beiträge: 1427
Registriert: 08.09.2005, 15:16
Wohnort: Grünburg

Beitrag von matin » 13.10.2007, 19:34

... die gleiche datei ... die endlosschleife wird bei dieser rule immer kommen ...
https://suchmaschinentricks.at/ - Ziehen Sie die Aufmerksamkeit im Internet auf sich ...
Kaufe verschiedene Projekte mit entsprechendem Content - Kontaktaufnahme per PN

w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 13.10.2007, 19:51

Versteh ich nicht ich will doch extern eine Datei umleiten die dann intern wieder zurückgewandelt wird! Warum kommt denn da ne Endlosschleife?
MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

matin
PostRank 9
PostRank 9
Beiträge: 1427
Registriert: 08.09.2005, 15:16
Wohnort: Grünburg

Beitrag von matin » 13.10.2007, 20:09

artikel?id=100 wird per 301 auf artikel100.html umgeleitet. artikel100.html soll aber die datei ?id=100 anzeigen, welche aber umgeleitet wird ... irgendwo fehlt ein stopp, dass eine rule nur 1 mal durchlaufen werden soll ... weiß aber nicht, wie das gelöst werden muss
https://suchmaschinentricks.at/ - Ziehen Sie die Aufmerksamkeit im Internet auf sich ...
Kaufe verschiedene Projekte mit entsprechendem Content - Kontaktaufnahme per PN

w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 13.10.2007, 20:48

ja klar aber die html datei wird doch nur intern umgewandelt, also kommt das doch beim browser nicht an und sollte somit keine endlosschleifer erzeugen!

also ich krieg hier noch ne krise!
MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

Anonymous

Beitrag von Anonymous » 13.10.2007, 20:54

setz doch erstmal ein [L] hinter jeder regel, damit mod_rewrite weis, das keine weitere Regel beachtet werden muss, wenn diese zutraf....

chris21
PostRank 9
PostRank 9
Beiträge: 2758
Registriert: 10.04.2005, 18:17

Beitrag von chris21 » 13.10.2007, 21:04

Hallo Lars,

das Problem besteht darin, dass die Endlosschleife eben dadurch erzeugt wird, dass beim Aufruf einer Datei artikel500.html eben artikel.php?id=500 aufgerufen werden soll, diese aber, da bisher von Google indexiert, eben auf artikel500.html weiterleiten soll. Zwar ist der eine Redirect extern, der andere intern (damit dann die .html stehen bleibt), aber der Apache bekommt einfach immer neue gegenseitige Anfragen und produziert die Endlosschleife.

Lösen kannst Du das Problem, in dem Du die artikel.php?id=500 auf die artikel500.html extern umleitest und dann die artikel500.html intern auf artikel.php?id=500&umgeleitet=ja umleitest.

Also:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^w3news\.de$ [NC]
RewriteRule ^(.*)$ https://w3news.de/news/$1 [L,R=301]

RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^(.*) https://w3news.de/news/artikel%1.html? [L,R=301]

RewriteRule ^index.php$ /news/ [R=301,L]
RewriteRule ^artikel911.html$ /news/artikel910.html [R=301,L]
RewriteRule ^artikel([0-9]+).html$ /news/artikel.php?id=$1&umgeleitet=ja
RewriteRule ^(.*)_(.*).html$ artikel.php?titel=$1&id=$2

RewriteRule ^bereich-(.*).html$ /news/index.php?bereich=$1

RewriteRule ^archiv/([0-9]+)/([A-Za-z]+)/$ archiv_monat.php?jahr=$1&monat=$2
RewriteRule ^archiv/([0-9]+)/([A-Za-z]+)/(.*)/$ archiv_tag.php?jahr=$1&monat=$2&tag_archiv=$3

RewriteRule ^(.*).html$ $1.php
Die Hinzufügung habe ich grün markiert, ihr einziger Zweck besteht darin, dass dann die Regel aus Zeile 4/5 nicht erneut angewendet wird und dadurch die Endlosschleife durchbrochen wird.

Viele Grüße

Chris

w3news
PostRank 8
PostRank 8
Beiträge: 938
Registriert: 10.10.2006, 23:17
Wohnort: Berlin

Beitrag von w3news » 13.10.2007, 21:35

@chris21
PERFEKT !!!

Jetzt klappt es! Kriegst ein Keks von mir ;) 8) :lol:
Ist aber auch wirklich Trick 17, darauf muss man erst einmal kommen...
MfG Lars

News, Tarife und Mobilfunk: w3news.de
Mobile Datenflatrates

do1emu
PostRank 4
PostRank 4
Beiträge: 149
Registriert: 21.01.2008, 14:27
Wohnort: Gütersloh

Beitrag von do1emu » 05.09.2008, 13:17

hm irgendwie stecke ich fest!!!

URL1: https://www.domain.com/dir1/dir2/index. ... on=du&id=9

nun soll beim aufrufen der URL1 umgeleitet werden auf

URL2: https://www.domain.com/dir1/dir2/hallo/du-hallo-9.html

klappt hiermit Rule1:

RewriteCond %{QUERY_STRING} ^mod=(.*)&action=(.*)&id=(.*)$
RewriteRule ^(.*) %1/%2-%1-%3.html? [L,R=301]

aber natürlich befindet sich in dem umgeleiteten Verzeichnis keine html-Datei und das Verzeichnis selber existiert ja auch nicht.

Daher mache ich dann folgendes Rule2:
RewriteRule ^(.*)/(.*)-(.*)-(.*).html$ https://www.domain.com/dir1/dir2/index. ... n=$2&id=$4

Jetzt ist es egal ob ich URL1 oder URL2 aufrufe ich lande immer in einer Schleife.

Also schließe ich daraus, dass beide Regeln erstmal an sich funktionieren.
Wenn ich in die .htaccess nur Rule1 oder nur Rule2 reinschreibe machen sie auch was gewünscht ist.

So nun komm ich zu der lösung von chris21:

Wenn ich das richtig verstehe, dann ist die Zeile mit dem in grün hinzugefügten Parameter der Schlüssel und dieses muss ich noch an Rule2
anhängen...

Wenn ich das mache, lande ich trotzdem in einer Schleife aber die Adresszeile ändert sich wie folgt:

beim Aufruf der URL1:
https://www.domain.com/dir1/dir2/index. ... eleitet=ja


beim Aufruf der URL2:
https://www.domain.com/dir1/dir2/hallo/ ... et=ja.html

also irgendwo habe ich noch nen kleinen/großen Fehler!?

hier nochmal die gesamte .htaccess: Pfad: (/dir1/dir2)

Code: Alles auswählen


RewriteBase /dir1/dir2
RewriteEngine on

#RewriteRule ^index.php$ /dir1/dir2 [R=301,L] 


RewriteCond %{QUERY_STRING} ^mod=(.*)&action=(.*)&id=(.*)$
RewriteRule ^(.*) %1/%2-%1-%3.html? [L,R=301]
RewriteRule ^(.*)/(.*)-(.*)-(.*).html$ http://www.domain.com/dir/dir/index.php?mod=$1&action=$2&id=$4&umgeleitet=ja


chris21
PostRank 9
PostRank 9
Beiträge: 2758
Registriert: 10.04.2005, 18:17

Beitrag von chris21 » 05.09.2008, 13:52

Hallo,

derzeit konntest Du die Endlosschleife nicht stoppen, da &id=(.*) in der RewriteCond auch das &umgeleitet=ja erfasst.

Eine mögliche Änderung zur Lösung (unter der Voraussetzung, dass die id immer aus einer Zahl besteht):

Code: Alles auswählen

RewriteBase /dir1/dir2
RewriteEngine on

#RewriteRule ^index.php$ /dir1/dir2 [R=301,L]


RewriteCond %{QUERY_STRING} ^mod=(.*)&action=(.*)&id=([0-9]*)$
RewriteRule ^(.*) http://www.example.com/%1/%2-%1-%3.html? [L,R=301]
RewriteRule ^(.*)/(.*)-(.*)-(.*).html$ /dir/dir/index.php?mod=$1&action=$2&id=$4&umgeleitet=ja
Edit: hab noch ein zweites Problem bei Dir entdeckt: Du willst ja letztlich eine URL ohne Query String in der Adresszeile als "tatsächliche" (obwohl fiktive) URL stehen haben. Daher musst Du aber zuerst einen externen Redirect auf die URL ohne Query String durchführen, dann aber einen internen Redirect auf die URL mit Query String, die dann von Deinem CMS verarbeitet wird. Habe das hier mal geändert.

do1emu
PostRank 4
PostRank 4
Beiträge: 149
Registriert: 21.01.2008, 14:27
Wohnort: Gütersloh

Beitrag von do1emu » 05.09.2008, 14:27

also erstens vielen dank!!! Ich lande schonmal nicht mehr in der Schleife :D

die id ist zum glück eine Zahl

zu dem zweiten problem, haste auch recht wenn ich nun URL2 aufrufe bleibt die url stehen und wird richtig umgeleitet, aber wenn ich URL1 aufrufe bleibt sie auch so im browser stehen und das ist ja nun grade das wichtige was sich ändern muss, damit google das neu indexiert

ich sehe jetzt leider keine Änderung die das hervorrufen könnte!?

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag