Seite 1 von 2

Problem bein erstellen einer 301er Uleitung (htaccess)

Verfasst: 15.01.2007, 10:23
von einherjar
Hallo,

SuFU hat nix genutzt, also Frage ich mal hier:

Ich muß alle Seitenaufufe die in dieser Form erfolgen:

https://www.o-brinkop.de/gemanischeMyth ... tikelId=15

umschreiben auf

https://www.o-brinkop.de/gemanischeMyth ... l_10_.html

.

Nun habe ich versucht, das wie folgt zu realisieren:

Code: Alles auswählen

RewriteCond %{REQUEST_URI} ^.*ArtikelAnzeigen [NC]
RewriteRule ^ArtikelAnzeigen\.php\?artikelId=(.*) GermanischeMythologie_Artikel_$1_.html [NC]
Was aber leider nicht funktioniert.

Wenn ich diesen Rewrite mache:

Code: Alles auswählen

RewriteCond %{REQUEST_URI} ^.*ArtikelAnzeigen [NC]
RewriteRule ^.(.*) blah=$1 
Schreibt er das:

Code: Alles auswählen

http://localhost/html/GermanenDatenbank/gemanischeMythologie/ArtikelAnzeigen.php?artikelId=25
[/code]

um auf das:

Code: Alles auswählen

The requested URL /html/GermanenDatenbank/gemanischeMythologie/blah=rtikelAnzeigen.php
Also scheine ich gar nicht an die angehängten Parameter dran zu kommen. Sonst müßtn die hinter blah=... ja auch auftauchen.

Für Hilfe wäre ich sehr dankbar.

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 15.01.2007, 12:54
von chrizz
willst du es umleiten, weils die seite nicht mehr gibt, oder bleiben es dynamische seiten die umgeschrieben werden um die sumafreundlichkeit zu erhöhen?

für letzteres schau mal hier....da steht erstmal nen bisschen was. hab leider meine datei nicht zu hand und kann dir im moment nicht sagen wie ichs gemacht habe. weiß nur das es anders war ;)
https://www.seo-consulting.de/pages/200 ... ewrite.php

cheesr!

Verfasst: 15.01.2007, 12:56
von chris21
@chrizz: Es geht um SuMa Freundlichkeit.

Hallo einherjar,

geht schon in die richtige Richtung, jetzt versuchen wir mal, die Fehler auszumerzen:

Code: Alles auswählen

RewriteCond %{REQUEST_URI} ^.*ArtikelAnzeigen [NC]
RewriteRule ^ArtikelAnzeigen\.php\?artikelId=(.*) GermanischeMythologie_Artikel_$1_.html
1. (Problem: die RewriteCond würde auch für die URL gelten, auf die umgeleitet wird). Edit: Tschuldigung, bitte gleich wieder vergessen, das war Stuss

2. Problem: bei dem zu ersetzenden Suchmuster der RewriteRule fehlt das das Suchmuster beendende "$"

3. Problem: da ich ja den Hintergrund aus dem anderen Thread kenne: es muss noch erklärt werden, dass es sich um einen externen Redirect handelt, weil später per internen Redirect wieder zurückgeleitet wird.

Lösungsversuch:

Code: Alles auswählen

RewriteCond %{REQUEST_URI} ^/germanischeMythologie/ArtikelAnzeigen\.php\?artikelID=([0-9]+)$ [NC]
RewriteRule ^/germanischeMythologie/ArtikelAnzeigen\.php\?artikelId=([0-9]+)$ /germanischeMythologie/GermanischeMythologie_Artikel_$1_.html [R=301,L]
Wenn der erst mal funktioniert, können wir sehen, ob wir den noch verallgemeinern, falls Du auch andere Ordner hast.

Verfasst: 15.01.2007, 13:50
von chrizz
so mal offtopic: gibts irgendwo ne ordentliche syntaxübersicht mit den ganzen htaccess befehlen? bisher musste ich mir das immer mühsam zusammensuchen...
thx in adv.
cheers!

Verfasst: 15.01.2007, 13:53
von chris21

Verfasst: 15.01.2007, 14:04
von chrizz
wunderbar....vielen dank....dann hab ich heute abend wieder was zu tun...:)

Verfasst: 15.01.2007, 14:34
von einherjar
chris21 hat geschrieben:@chrizz: Es geht um SuMa Freundlichkeit.

Code: Alles auswählen

RewriteCond %{REQUEST_URI} ^/germanischeMythologie/ArtikelAnzeigen\.php\?artikelID=([0-9]+)$ [NC]
RewriteRule ^/germanischeMythologie/ArtikelAnzeigen\.php\?artikelId=([0-9]+)$ /germanischeMythologie/GermanischeMythologie_Artikel_$1_.html [R=301,L]
Wenn der erst mal funktioniert, können wir sehen, ob wir den noch verallgemeinern, falls Du auch andere Ordner hast.
Hallo,

erstmal schönen Dank für die bisherige Hilfe. Leider ist noch immer der Wurm drin.

Obiger Lösungsansatz funktioniert nicht. Ein Frage ergibt sich aber. Ich teste das hier ja die ganze Zeit auf meinem Testserver (LAMPP).
Der scheint aber im URI nicht die angehängten Parameter zu finden:

Code: Alles auswählen

RewriteCond %{REQUEST_URI} ^.*ArtikelAnzeigen.*$ [NC]
RewriteRule ^.*artikelId.*$ GermanischeMythologie_Artikel_$1_.html [R=301,L,NC] 
Ich habs wieder vereinfacht, weil es nicht ging.
Er schreibt nichts um. Weil er wohl das Suchmuster nicht findet. Sobald ich "Id" rausnehme, findet er aber wieder was und ersetzt es.

Also alles was darauf abzielt, den URLParameter zu finden, scheitert.


Es funktioniert im Grunde so lange, bis ich den Parameter artikelId mit in den Suchpattern reinnehme. Sobald ich das tue, findet er das Suchmuster nicht mehr.

Code: Alles auswählen

RewriteCond %{REQUEST_URI} ^.*ArtikelAnzeigen.*$ [NC]
RewriteRule ^.*ArtikelAnzeigen\.php GermanischeMythologie_Artikel_$1_.html [R=301,L,NC] 
Resultiert also noch in einem Rewrite (ins Nirvana, aber immerhin) und

Code: Alles auswählen

RewriteCond %{REQUEST_URI} ^.*ArtikelAnzeigen.*$ [NC]
RewriteRule ^.*ArtikelAnzeigen\.php\?artikelId.*$ PGermanischeMythologie_Artikel_$1_.html [R=301,L,NC] 
führt wieder zu keinem Suchtreffer und das Umleiten erfolgt nicht :-(

Der Parameter muß doch aber im URI mit übermittelt werden, wo sollte er denn sonst herkommen :bad-words:

Verfasst: 15.01.2007, 15:07
von chris21
Eigentlich müsste hier nur mal kurz haha oder Cateham vorbeischauen... :(

aber solange die beiden abwesend sind, müssen wir uns selber helfen:

Zweiter Versuch:

Code: Alles auswählen

RewriteCond %{REQUEST_URI} ^/germanischeMythologie/ArtikelAnzeigen\.php\?artikelID=([0-9]+)$ [NC]
RewriteRule ^(.*)$ /germanischeMythologie/GermanischeMythologie_Artikel_%1_.html [R=301,L]
Dies mal versuche ich, die Artikel-ID aus der RewriteCond zu ziehen (%1).

Wenn das wieder nicht hilft, muss ich mir glaub ich mal eine Testumgebung für Dein Problem bauen...

Verfasst: 16.01.2007, 08:36
von einherjar
Hallo nochmal,

ich habe das nun hinbekommen und es geht doch nicht :cry:

Denn die Antwort des Browsers ist:
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.
Der Tipp mit dem %1 war gut, da wäre ich nicht drauf gekommen und so funktioniert das Umleiten ja dann auch:

Code: Alles auswählen

RewriteEngine on

#lokal
RewriteBase /html/GermanenDatenbank/gemanischeMythologie

RewriteCond %{THE_REQUEST} ^.*artikelId=([0-9]+).*$ [NC]
RewriteRule ^ArtikelAnzeigen.*$ Germanische_Mythologie_Artikel_%1_.html [R=301,NC] 
#RewriteRule ^ArtikelAnzeigen.*$ NordischeMythologieAlphabetisch.php [R=301,L] 

RewriteRule ^Germanische_Mythologie_Artikel_(.*)_(.*).html ArtikelAnzeigen.php?artikelId=$1&schlagwort=$2 [L,NC]
RewriteRule ^Germanische_Mythologie_Reiseziel_(.*).html ReisezielAnzeigen.php?artikelId=$1 [L,NC]
Nur das scheinbar der Rewrite auf die statische virtuelle .html Datei dann als Schleife erkannt wird und dann ist Ende. Dabei sollte das Flag [L] doch eigentlich heißen, daß nach ausführen dieser Regel keine weitere angewendet wird und es gibt eben doch keine Schleife.

Vielleicht weiß da ja noch jemand einen Trick.

Viele Grüße

einherjar

Verfasst: 16.01.2007, 12:05
von chris21
Also, ich bin da genau so am lernen wie Du, aber

Code: Alles auswählen

RewriteCond %{THE_REQUEST} ^.*artikelId=([0-9]+).*$ [NC]
RewriteRule ^ArtikelAnzeigen.*$ Germanische_Mythologie_Artikel_%1_.html [R=301,NC]d
Warum bist Du da von REQUEST_URI auf THE_REQUEST gewechselt?

Zumnidest bei PHP ist REQUEST_URI nämlich nicht die umgeschriebene URI, sondern die aufgerufene. Da die zweite RewriteRule ja intern leitet, sollte REQUEST_URI hier besser sein.

Zum anderen: hast Du schon versucht, das "L" Flag ("last") hier mit einzufügen? Also [R=301,L,NC] Es klingt zwar unlogisch in Bezug auf die Mod Rewrite Beschreibung in den Apache docs, aber einmal versuchen wäre vielleicht nicht schlecht, um zu sehen, ob das Modul einen externen Redirect nicht in eine Linie stellt mit einem internen Redirect.

Verfasst: 16.01.2007, 12:29
von einherjar
chris21 hat geschrieben:Also, ich bin da genau so am lernen wie Du, aber

Code: Alles auswählen

RewriteCond %{THE_REQUEST} ^.*artikelId=([0-9]+).*$ [NC]
RewriteRule ^ArtikelAnzeigen.*$ Germanische_Mythologie_Artikel_%1_.html [R=301,NC]d
Warum bist Du da von REQUEST_URI auf THE_REQUEST gewechselt?
Nun, in REQUEST_URI hat er einfach den Pattern artikelId nicht gefunden. Warum verstehe ich ehrlich gesagt nicht.
Dann habe ich halt einfach THE_REQUEST versucht, was ja einfach auch nur die gesamte HTTP Anfrage ist und da mußte ja der Parameter irgendwo drinstehen.
Da findet er den Pattern dann auch.
chris21 hat geschrieben: Zumnidest bei PHP ist REQUEST_URI nämlich nicht die umgeschriebene URI, sondern die aufgerufene. Da die zweite RewriteRule ja intern leitet, sollte REQUEST_URI hier besser sein.
Das Problem scheint zu sein, das der 2te eben (warum auch immer)

1. Entweder nicht intern leitet (da im Browser immer noch blah.html steht scheint er das aber intern zu machen
2. Der Apache erkennt das das im Kreis geht und dann abbricht

chris21 hat geschrieben: Zum anderen: hast Du schon versucht, das "L" Flag ("last") hier mit einzufügen? Also [R=301,L,NC] Es klingt zwar unlogisch in Bezug auf die Mod Rewrite Beschreibung in den Apache docs, aber einmal versuchen wäre vielleicht nicht schlecht, um zu sehen, ob das Modul einen externen Redirect nicht in eine Linie stellt mit einem internen Redirect.
Das probier ich mal. Wenn es allerdings so wäre, wüßte ich auch nicht was ich dann machen soll...[/list]

Verfasst: 16.01.2007, 12:57
von chris21
chris21 hat geschrieben: um zu sehen, ob das Modul einen externen Redirect nicht in eine Linie stellt mit einem internen Redirect
Das hatte ich wohl schlecht formuliert, ich meinte gerade, dass das Modul hier unterscheidet und daher ein L nur für weitere externe Redirects gilt, nicht jedoch für interne.

Das mit REQUEST_URI ist interessant. Bei PHP wäre der Query-String Teil des REQUEST_URI, bei dem Mod Rewrite Modul des Apache anscheinend nicht.

Alternative:

Code: Alles auswählen

RewriteCond %{REQUEST_URI} ^.*ArtikelAnzeigen\.php$ [NC]
RewriteCond %{QUERY_STRING} ^artikelId=([0-9]+).*$ [NC]
RewriteRule ^ArtikelAnzeigen.*$ Germanische_Mythologie_Artikel_%1_.html [R=301,L,NC]
Eventuell eben auch ohne L.

Ansonsten müsste man den externen Redirect über PHP realisieren:

In der ArtikelAnzeigen.php am Anfang z.B.:

Code: Alles auswählen

$aufruf=$_SERVER["REQUEST_URI"];
if(ereg("ArtikelAnzeigen",$aufruf))
{
$ArtikelID=$_GET["artikelId"];
header("HTTP/1.1 301 Moved Permanently");
header("Status: 301 Moved Permanently");
header("Location:http://www.o-brinkop.de/germanischeMythologie/Germanische_Mythologie_Artikel_".$ArtikelID."_.html");
header("Connection:close");
exit();
}

Verfasst: 16.01.2007, 17:41
von Gagget
Also ich hab das zwar jetzt nur kurz überflogen ... kann sein das was ich nich gesehen hab .... aber kann das sein das ihr was vertauscht ? ... normal doch so oder nicht ?

Code: Alles auswählen

RewriteEngine On
RewriteBase /gemanischeMythologie/

RewriteCond %{REQUEST_FILENAME} 	
germanischeMythologie/Germanische\_Mythologie\_Artikel\.([1-9][0-9]*)\.html 

RewriteRule germanischeMythologie/Germanische\_Mythologie\_Artikel\.([1-9][0-9]*)\.html ArtikelAnzeigen.php?artikelId=$1 [L]
wenn nich möge man es mir verzeihen

Verfasst: 16.01.2007, 22:05
von chris21
@Gagget

Du kennst das Ausgangsproblem nicht. Es ging darum, virtuelle .html Dateien zu erzeugen. Allerdings sind schon die ArtikelAnzeigen.php indexiert. Daher wäre eine externe Umleitung angebracht, die dann wiederum intern zurückumleitet.

Verfasst: 17.01.2007, 13:20
von einherjar
chris21 hat geschrieben: ich meinte gerade, dass das Modul hier unterscheidet und daher ein L nur für weitere externe Redirects gilt, nicht jedoch für interne.
Ich habe den externen Redirect jetzt mal mit

[R=301,NC,L]

ausgeführt. Das führt dann auch zu dem Umleitungsfehler. Der ext. Redirect wird also wohl nicht in eine Linie mit den internen gestellt.

Jetzt bin ich mir allerdings nicht sicher, ob der Server den Redirect abbricht, oder der Mozilla, weil er erkennt (obwohl er das bei interner Umschreibung ja nicht können sollte), daß er doch wieder die ursprünglich angeforderte URI kriegt.