• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

htaccess php-Variablen entfernen

andy83

New member
Moin, moin aus Hamburg....

Ich habe folgende URL: /matches/match.php?match=$id
Ich hätte aber gerne so eine: /matches/match=$id/index.php

Geht das? Wenn ja, hat jemand einen Vorschlag? Und kann ich $id dann normal mit $_GET auslesen?

Ich danke euch sehr!!!!!
 
Mit den entsprechenden mod-rewrite Regeln in der htaccess kannst du das Zweite so Umleiten, als wäre es so wie das Erste.
Les' dir dazu mal die Doku durch.
 
Hmm.... habe bereits viel gelesen und gegoogled und diesmal evtl. mit einer direkten Lösung gehofft...
 
D.h du hast eine URL:
http://de.uefa.com/under19/season=2014/matches/live/day=15/session=1/match=2011140/index.html

und möchtest die intern umleiten - hier kannst du mit 100% Sicherheit davon ausgehen, dass es keine index.html gibt, das ist nur Dekoration, damit es ein bisschen aussieht wie eine normale URL. Das wird auf ein Skript umgeleitet - vermutlich per mod_rewrite.

Das könnte z.b. so aussehen:
Code:
RewriteEngine on
RewriteRule ^(.*)/(.*)$ test.php?param=$1
Dann käme in test.php folgender Parameter an:
Code:
array(1) {
  ["param"]=>
  string(63) "under19/season=2014/matches/live/day=15/session=1/match=2011140"
}
Denn kannst du dann im PHP Skript auswerten.

Wenn du Muse hast, kannst du das natürlich auch mit mod_rewrite machen, dazu müsste man aber im Detail wissen, was die einzelnen Bestandteile machen.
 
ich denke, der schlaue hat recht. das index.html ist nur dekoratives beiwerk.

du kannst unter der mod_rewirte die dateien auch umbenennen

RewriteRule under19/(.*)/(.*)/(.*)/(.*)$ index.php?$1=$2&$3=$4

index.php wird hier zur "under19" und jeder weitere wert kann dann beliebeig angehangen werden

index.php?season=2014&matches=live

wird unter der rewirte zu under19/season/2014/matches/live
 
Da das nicht funktioniert:

RewriteRule /matches/(.*)=(.*)/index.php$ /matches/match.php?$1=$2

ist es wohl falsch!? :(
 
Natürlich funktioniert das, wenn die Rahmenbedingungen auf deinem Server stimmen.
Aber ich halte diese vorhgehensweise für unflexibel und Fehleranfällig. Einfacher ist es, so wie ich es vorgeschlagen habe.
 
mod-rewrite ändert gar nichts im Browser, sondern macht das alle "versteckt" auf dem Server. D.h. eine URL wird an den Server geschickt und dieser behandelt die dann so, als würde die URL reinkommen, die nach dem rewrite ausgegeben wird.
Wenn du Änderungen in der URL-Adresse des Browsers sehen willst, musst du mit redirects arbeiten.
 
matches/match.php?match=1
oder habe ich nen Denkfehler?
Also ich bin davon ausgegangen, dass du die URL so aufrufen möchtest, wie in dem von dir gezeigten Beispiel. Aber so ist wie du es hier zeigst ist es nicht sinnvoll, besser ist einen Frontcontroller zu benutzen, der entsprechend der Parameter die Verarbeitung weiterleitet. Also in etwas so: index.php?action=match&id=1
 
Wenn Du in der .htaccess die mod-rewrite an hast, musst Du sie über die URL-Leiste auch entsprechend aufrufen ^^

Tausch das mal gegen das aus:

Code:
RewriteRule /matches/match/(.*)-(.*)$ /matches/index.php?$1=$2

(da ich deine Variablen nicht kenne denke ich mir welche aus)

und der Aufruf über die URL-Leiste wäre localhost/matches/match/spiel-1

jetzt kannst du mit

PHP:
$spiel = mysql_real_escape_string($_GET['spiel']);

den Datensatz 1 aus der mySQL-Datenbank auswählen und ausgeben...

EDIT:

Wenn Du die .htaccess im Root hast, verschiebe sie in den Ordner Matches, sofern das einer ist und entferne /matches/ aus der rewriterule
 
Zuletzt bearbeitet:
Vielen Dank für die Hilfen - es klappt!

Jetzt noch was anderes zu dem Thema:

PHP:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule ^\.php$ /error.php[L]

Damit erscheint der Inhalt von error.php bei bleibender falscher URL - was auch funktioniert

Was ist aber bei folgendem Szenario:

URL: mysite.com?city=newyork oder ?city=12345
Die Seite wird geöffnet und der Request per SQL verarbeitet

URL: mysite.com?ciy=newrk oder ?city=123
Die DB enthält diese Einträge nicht und es soll wie oben mit rewrite verfahren werden. Geht das überhaupt?

Vielen Dank
 
Nein, das geht nicht, da der Apache nichts von deiner Datenbank und deren Inhalt weiß. Aber du kann doch im PHP einfach einen Redirekt-Header ausgeben, wenn die Abfrage kein Ergebnis zurückliefert.
 
Zurück
Oben