RewriteRule Frage

B

Bleys

Guest
Ich verzweifel seit Stunden an einer RewriteRule Konfiguration. ich benutze diese Möglichkeit das erste Mal und bin auch nicht der RegEX Spezialist.

Ich hoffe Ihr könnt mir helfen.

Die Aufgabe: Ich muss sämtliche Seiten an ein PHP Script übergeben. Hab das Script erstmal index.php genannt. Dabei muss die Ursprungs Adresse sowie alle GET und POST Variablen mitgeliefert werden. .htacces und das Script sind im Root Verzeichnis eines virtuellen Hosts von Apache2 unter Ubuntu 8.04, die Datenbank liegt auf einem anderem Server unter Windows.

Das hab ich bis jetzt in einer .htaccess:

CODE RewriteEngine on
RewriteRule (.*)/(.*) /index.php?uri=$0 [QSA]



damit erhalte ich in uri schonmal den aurufenden Link und GET Vars wenn vorhanden. An den POST Vars verzweifel ich..

Hintergrund: Ich habe eine etwas ältere Datenbank die u.a. einen integrierten Webserver hat und intern Daten an Webclienten liefert. Die Möglichkeiten auf die Gestaltung dieser Seiten Einfluss zu nehmen sind stark beschränkt. Deshalb will ich den Inhalt aller Seiten durch mein PHP Script schleusen um eine vernünftige Nachbearbeitung durchführen zu können.
Ich passe also alle Seiten vom DB Webserver an den Clienten an. Die Anfragen vom Client zum DB Webserver werden durch das Script durchgereicht.

print_r($_REQUEST); führe ich natürlich im Kopf des Scripts index.php aus.....

Wie komme ich an die POST Variablen?

Schonmal vielen Dank für jeden Tip der hoffentlich kommt
wink.gif


Gruß, Bleys
 
QUOTE (lalo @ Fr 10.10.2008, 08:27) Hi,

probier es mal mit : $_POST ;-)

$_REQUEST Beinhaltet u.a. POST und GET Variablen....
 
QUOTE (Oliver Pester @ Fr 10.10.2008, 09:04)
QUOTE probier es mal mit : $_POST ;-)


$_REQUEST enthält $_GET und $_POST

Oli

Das stimmt, aber der gibt Dir alles so zurück und nicht getrennt nach Get / Post / cookie... oder habe ich das falsch in Erinnerung ?

Also wenn er nur die Post Werte haben will $_POST oder steh ich gerade auf dem Schlauch ? ;-)
 
QUOTE (lalo @ Fr 10.10.2008, 10:32)
QUOTE (Oliver Pester @ Fr 10.10.2008, 09:04)
QUOTE probier es mal mit : $_POST ;-)


$_REQUEST enthält $_GET und $_POST

Oli

Das stimmt, aber der gibt Dir alles so zurück und nicht getrennt nach Get / Post / cookie... oder habe ich das falsch in Erinnerung ?

Also wenn er nur die Post Werte haben will $_POST oder steh ich gerade auf dem Schlauch ? ;-)

Ich sags mal so: Ich weiss so ziemlich zu 100% was ankommen muss. Ich weiss welche Seiten Vars per GET mitschicken und welche per POST und welche beides senden.
Ich kenne in meiner Testumgebung Namen und Inhalt jeder einzelnen Variable die ich erwarte....
 
Nach allem was ich bisher dazu im Netz gefunden habe sollten die POST Variablen funktionieren. KA, warum das nicht so ist.

Ich bin aber auch ziemlich sicher das ich die Funktionsweise von RewriteRules noch nicht wirklich verstehe.
 
Hallo,

eine Post-HTTP-Anfrage ist leider nicht direkt bei RewriteRule extern umleitbar, oder genauer: die über POST gesendeten Variablen sollten dabei verloren gehen - was aus Sicherheitsaspekten auch zu begrüßen ist. Allenfalls intern ist eine Umleitung über mod_rewrite möglich. Nun ist nach Deinen Angaben aus Deiner Frage eine interne Umleitung gegeben, wenn die RewriteRule tatsächlich so aufgebaut ist, wie von Dir beschrieben - also ohne komplette URL und ohne R-Flag. Falls aber tatsächlich bei Dir keine interne, sondern externe Weiterleitung erfolgt, müsstest Du dies in eine interne Weiterleitung ändern.

GET ist kein Problem, da hier die Variablen Bestandteil des QueryStrings/der URL sind.




 
QUOTE (Chris-tian @ Fr 10.10.2008, 19:18) Hallo,

eine Post-HTTP-Anfrage ist leider nicht direkt bei RewriteRule extern umleitbar, oder genauer: die über POST gesendeten Variablen sollten dabei verloren gehen - was aus Sicherheitsaspekten auch zu begrüßen ist. Allenfalls intern ist eine Umleitung über mod_rewrite möglich. Nun ist nach Deinen Angaben aus Deiner Frage eine interne Umleitung gegeben, wenn die RewriteRule tatsächlich so aufgebaut ist, wie von Dir beschrieben - also ohne komplette URL und ohne R-Flag. Falls aber tatsächlich bei Dir keine interne, sondern externe Weiterleitung erfolgt, müsstest Du dies in eine interne Weiterleitung ändern.

GET ist kein Problem, da hier die Variablen Bestandteil des QueryStrings/der URL sind.

Danke für den Tip!

Das schränkt den Gebrauch von RewriteRule ja auf einfache Seiten ein. Alles was mehr wie 2-3 Daten sendet, sendet die ja per POST. Ich habe dann z.B. nicht ein einziges Projekt das damit funktionieren wird oO
Und ich hatte bei der Suche nach meiner Lösung schon richtig Feuer gefangen bei dem was damit URL mäßig so möglich ist. Schade...

Kannst Du mir evtl. auch noch sagen wie mit mod_rewrite eine interne Umleitung realisiert wird?
 
Das ist das Problem, welches ich mit Deiner Beschreibung von oben hatte:

RewriteRule (.*)/(.*) /index.php?uri=$0 [QSA]

sollte eigentlich eine interne Umleitung (sprich: ein Alias) darstellen, d.h. u.a., dass die usprüngliche URL im Browser stehen bleibt. In diesem Falle sollten auch POST-Variablen über die RewriteRule mit übergeben werden. Dies wäre bei einer externen Umleitung (z.B.

RewriteRule (.*)/(.*) http:neuedomain.tld/index.php?uri=$0 [QSA]

) nicht der Fall.



Von der Anzahl der GET- oder POST-Variablen sollte es übrigens nicht abhängen.

Könntest Du herausfinden, welche Apache-Version du verwendest und welche Module da geladen sind?

 
QUOTE ralf@Nexus:~$ apache2 -t -D DUMP_MODULES
Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
rewrite_module (shared)
setenvif_module (shared)
status_module (shared)
Syntax OK



ralf@Nexus:~$ apache2 -v
Server version: Apache/2.2.8 (Ubuntu)
Server built: Jun 25 2008 13:54:13
 
ich probier in den letzten Stunden alles mögliche..

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)/(.*) /index.php?uri=$0&var1=$1&h1=%{REQUEST_URI}&h2=%{THE_REQUEST}&h3=%{REQUEST_FILENAME} [QSA]


Wenn ich die Beschreibung von RewriteCond richtig verstanden hab sollten die obigen Zeilen nur noch eine Umleitung durhführen wenn die angeforderte Seite/Datei nicht vorhanden ist. Funktioniert ebenfalls nicht.

Ich glaub fast es könnte an der der Konfiguration Apache2, VirtualHost u.s.w. insgesamt liegt.

[Nachtrag]

Ich nehm alles zurück, die Conditions funktionieren. ich vergess immer wieder das unter Windows Groß-/Kleinschreibung keine Rolle spielt und daher Seiten die die auf einem webserver unter Windows funktionieren nicht mehr laufen wenn sie auf eine Webserver übertragen werden der auf Linux läuft.

[Gelöst]
Hab den Fehler gefunden. Folgende Konfiguration funktioniert jetzt:

CODE RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ /index.php


Alle GET und POST Vars kommen an. Mit $_SERVER['REQUEST_URI'] erhalte ich die aufrufende Adresse. Ursache war ein content-type="text" statt "application/x-www-form-urlencoded" in der ersten Seite die von der DB gesendet wird. Warum der content-type die Übertragung der POST Vars verhindert weiss ich allerdings nicht...
 
Zurück
Oben