$_GET und .htaccess

Wie wir alle wissen (sollten) ändert mod_rewrite keine Links im Script. Damit auch die Links auf Deiner Page auf die neuen "Rewrited URLs" zeigen bedarf es der Anpassung im Code. Fragen und Probleme rund um's Coding werden hier diskutiert.

Moderator: Super-Mod

$_GET und .htaccess

Beitragvon piep83 » 09.05.2006 09:48

hallo,
mit nachfolgender htaccess datei schreibe ich meine url um

Code: Alles auswählen
RewriteEngine on
RewriteRule schwerpunkte.php$ index.php?task=schwerpunkte
RewriteRule kontak.php$ index.php?task=kontak
RewriteRule impressum.php$ index.php?task=impressum
RewriteRule aktuell([0-9]+).php$ index.php?task=aktuell&beitrag=$1

der seitenaufruf funktioniert einwandfrei, leider kann ich aber nicht
auf die $_GET Variablen zugreifen (der zugriff auf $QUERY_STRING
funktioniert aber). hoffe ihr könnt mir hier weiterhelfen.

vielen dank im vorraus
piep83
.
.
 
Beiträge: 14
Registriert: 02.01.2006 12:28

Beitragvon Bob » 09.05.2006 10:00

leider kann ich aber nicht
auf die $_GET Variablen zugreifen (der zugriff auf $QUERY_STRING
funktioniert aber)
Das klingt dann nach einem PHP-Problem und keines durch mod_rewrite.
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon piep83 » 09.05.2006 10:09

hallo Caterham,

leider kann ich aber nicht
auf die $_GET Variablen zugreifen

meinte ich eigentlich das diese leer ist - sry.

denke weil ich mit dem aufruf (kontakt.php) direkt
keine variable weitergebe, wird diese leer sein. mit
modrewrite schreibe ich die url um indem ich die
variable einfach anhänge - deshalb werd ich auch auf
$QUERY_STRING zugreifen können. hatte gedacht es gibt
über modrewrite trotzdem ein möglichkeit auf die $GET
Variable zuzugreifen (durch abänderung oder erweiterung
meiner rules)?
piep83
.
.
 
Beiträge: 14
Registriert: 02.01.2006 12:28

Beitragvon Bob » 12.05.2006 23:42

Ein Zugriff auf $_GET ist immer eine PHP-Sache. Warum hier PHP nicht fehlerfrei läuft, ist jedoch kein mod_rewrite-Problem. Für PHP sollte das keinen Unterschied machen.
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Re: $_GET und .htaccess

Beitragvon brik » 18.08.2006 01:11

hallo,

Ich scheine ein ähnliches Problem zu haben - zumindest geht es auch bei mir um die Übergabe.
Ich habe meine URL folgendermaßen umgeschrieben:

Code: Alles auswählen
RewriteEngine on
RewriteRule ([a-z]+)/([A-Za-z0-9-]+).html$ index.php?lan=$1&page=$2
ReWriteRule ([a-z]+)/([a-z]+)/([A-Za-z0-9-]+).html$ index.php?lan=$1&page=$2&subpage=$3
ReWriteRule ([a-z]+)/([a-z]+)/([a-z]+)/([0-9]+)-([A-Za-z0-9-]+).html$ index.php?lan=$1&page=$2&subpage=$3&itemid=$4&itemname=$5


In der index.php mache ich nichts weiter als eben jene Dateien auszugeben:

Code: Alles auswählen
<?php
  print_r($_GET);
?>


Wenn ich

http://gtaberlin.de/test/de/modelle.html

aufrufe, klappt alles wunderbar.
Wenn ich nun allerdings

http://gtaberlin.de/test/de/modelle/autos/1-BMW-5.html

aufrufe, steht als Sprache auf einmal PHP da.
Ich hab schon $lang, $language und $lan als Identifier für die Variable benutzt, immer mit dem gleichen Ergebnis.

Edit: Vielleicht kann mir bei der Gelegenheit ja gleich noch jemand einen Rat für eine effizentere Umsetzung der Simulation verschiedener Ordner mit unbekannter Tiefe geben.
Zuletzt geändert von brik am 18.08.2006 10:45, insgesamt 1-mal geändert.
brik
.
.
 
Beiträge: 5
Registriert: 18.08.2006 01:06

Beitragvon Bob » 18.08.2006 03:25

Edit: Vielleicht kann mir bei der Gelegenheit ja gleich noch jemand einen Rat für eine effizentere Umsetzung der Simulation verschiedener Ordner mit unbekannter Tiefe geben.
In PHP anhand des Slashs $_SERVER['REQUEST_URI'] splitten.

Deine URLs müssten normal alle in die erste Regel laufen, da dirse ja immer wahr ergibt. Sie ist nach links hin offen. Wie da aber php hineinkommt... das wird dir nur die RewriteLog verraten können.
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon brik » 29.08.2006 15:54

Ich habe jetzt den Rat, alles in PHP zu verarbeiten, befolgt.
Ich fange also alles, was es nicht zu geben scheint, ab

Code: Alles auswählen
RewriteEngine On
ErrorDocument  404  /test/index.php


Und bemühe dort $_SERVER["REQUEST_URI"] und stelle damit dann allerhand Blödsinn an. In Mozilla/FF funktioniert das wunderbar, allerdings will der IE nicht mitziehen und gibt stattdessen immer seine eigene 404-Seite aus, zum Beispiel hier:
http://www.gtaberlin.de/test/de/team.html

Da fehlt mir als Laie einfach ein Erklärungsansatz, da sowohl PHP als auch mod_rewrite ja eigentlich serverseitig arbeiten.

edit: web-sniffer.net findet oben genannte Seite, der W3-Validator nicht; falls das hilft.
brik
.
.
 
Beiträge: 5
Registriert: 18.08.2006 01:06

Beitragvon Bob » 29.08.2006 17:13

Besser ist es, du leitest per
Code: Alles auswählen
RewriteRule \.html /test/index.php [L]
auf deine Seite um, denn bis ein 404 generiert wird, dauert das etwas länger. Daneben müsstest du den Statuscode über die PHP-Header()-Funktion auf 200 umschreiben, sonst lieferst du deine Seiten mit dem Statuscode 404 not found aus - entspr. würde keine Suchmaschine die Seite indizieren.

Code: Alles auswählen
header("HTTP/1.0 200 OK");
(per z.B. http://web-sniffer.net überprüfen)
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon brik » 29.08.2006 17:47

Danke für die schnelle Antwort, es lag wirklich "nur" am Header.
Habe jetzt aber trotzdem deinen anderen Tipp befolgt.

Danke. :)
brik
.
.
 
Beiträge: 5
Registriert: 18.08.2006 01:06


Zurück zu Programmierung & Scriptanpassung für mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron