php.de

Zurück   php.de > Webentwicklung > Server, Hosting und Workstations

Server, Hosting und Workstations Server-Konfigurationsdateien (.htaccess/httpd.conf) und Arbeiten auf Serverebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.07.2007, 21:40  
Benutzer
 
Registriert seit: 05.10.2004
Beiträge: 66
Stinger
Stinger eine Nachricht über ICQ schicken
Standard mod_rewrite - problem bei leerem Parameter [done]

Hallo zusammen!

Es dreht sich um folgenes:

Die URL /seite,wert1,wert2 soll auf /seite.php?parameter1=wert2&paramerter2=wert2 umgeleitet werden.

Dafür habe ich folgende Regel:



Code:
RewriteRule ([a-z][a-z]*),([0-9].*),([0-9].*) $1.php?action=$2&id=$3
Diese klappt auch solange alle Parameter übergeben werden. Sobald jedoch ein oder beide Parameter fehlen bekomm ich einen 404.

Liegt es an meiner Regel oder gibt es dafür generell keine Möglichkeit?

gruß Stinger
Stinger ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.07.2007, 22:35  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.991
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Was heißt denn fehlende Parameter? Das:
Code:
/seite
oder das
Code:
/seite,,
Wie auch immer, der Ausdruck ist Mist:
- [a-z][a-z]* ist gleichbedeutend mit [a-z]+
- [0-9].* erwartet eine Ziffer gefolgt von einer beliebigen Anzahl (auch 0) beliebiger Zeichen. Soll das so? Hier liegt auch der Knackpunkt: Komma und Wertangabe sind nicht variabel, d.h. der Ausdruck erwartet diese Zeichen oder er passt nicht auf die URL und die mod_rewrite Ersetzung wird nicht ausgeführt.
nikosch ist gerade online   Mit Zitat antworten
Alt 24.07.2007, 22:43  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Stinger,

zum einen schränkst du dich hier gewaltig ein, da du - auf sehr ungenerische Weise - nur 3 Parameter zulässt, zum anderen weißt du den Apachen an, nur bei einem Matching mit dem von dir vorgegebenem Pattern den Rewrite durchzuführen. Hier fehlt zunächst mal eine "RewriteCond" vor dem "RewriteRule" und anschließend würde ich mir eine generische Rewrite-Rule wie


Code:
RewriteRule ^/MyAPP/([a-zA-z0-9,-_]) index.php?RequestPath=$1
überlegen. In der index.php übersetzt du dann den Parameter "RequestPath" entsprechend in deinen Kontext. So kannst du beliebig viele Parameter hinzufügen.

Wenn du das noch generischen Machen möchtest solltest du URL-Filter einführen, die sowohl den Rewrite-Modus als auch den "normalen" Modus unterstützen. Hier kann ich dir http://www.adventure-php-framework.org ans Herz legen. Unter http://www.adventure-php-framework.o...7b39b0a45.html wurde ein Satz generischer URL-Filter implementiert, die dir eine URL in die "Sprache" der Applikation übersetzen. So ist es möglich URLs der Form

Code:
http://www.adventure-php-framework.org/Seite/DemoGaestebuch/gbview/createentry
so zu "extrahieren", dass sich später die Parameter

Code:
Seite=DemoGaestebuch
gbview=createentry
im Request-Array befinden und die Applikation ganz normal damit arbeiten kann. Die Rewrite-Rule dazu sieht folgendermaßen aus:

Code:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^(\/frontend) [NC]
RewriteRule !((index|helloworld).php|css|jpe?g|png|gif|zip|rar)$ /index.php?query=%{REQUEST_URI}&%{QUERY_STRING} [NC,L]

Die zweite Zeile schließt gewisse URLs aus (hier der Frontend-Ordner, in dem die Bilder liegen), die dritte Zeile leitet alles auf die Index.php weiter, solange es kein Bild oder keine bestimmte PHP-Datei ist. Der hier aktive Filter ist http://www.adventure-php-framework.o...st_filter.html. Dieser übersetzt in der Methode filter() die gerewritete URL in "normale" Request-Parameter. Es werden mit dieser Methode URLs der obigen Form oder auch der Form

Code:
http://www.adventure-php-framework.org/Seite/DemoGaestebuch/gbview/createentry?test=123
übersetzt.

Any questions?
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 25.07.2007, 09:01  
Benutzer
 
Registriert seit: 05.10.2004
Beiträge: 66
Stinger
Stinger eine Nachricht über ICQ schicken
Standard

Guten Morgen!

Danke schonmal für die vielen Tipps.
Ich denke ich werde es mit dem Requestpath machen. Allein schon weil ich dann flexibler bin, wenn noch mal ein 3. Parameter hinzu kommen sollte.

Könntet ihr mir dennoch sagen wie ich meine oben gepostete Regel umschreiben müsste, damit sie funktioniert?

@nikosch: mit keinem parameter meinte ich anstatt seite,5,5 nur seite oder seite,5
Stinger ist offline   Mit Zitat antworten
Alt 25.07.2007, 09:27  
Benutzer
 
Registriert seit: 05.10.2004
Beiträge: 66
Stinger
Stinger eine Nachricht über ICQ schicken
Standard

ich bin's nochmal^^

Ich habe deine Regel, dr.e, etwas umgewandelt

Code:
RewriteRule ([a-zA-z0-9,-_]) index.php?RequestPath=$1
leider funktioniert sie nicht. Liegt das an meinen Änderungen? Ich habe keine subdir, von daher kann ich doch das /MyAPP/ wegnehmen oder?

Du sprachst von einer RewriteCond, wie müsste diese denn Aussehen?

greets
Stinger ist offline   Mit Zitat antworten
Alt 25.07.2007, 10:14  
Erfahrener Benutzer
 
Benutzerbild von DER_Brain
 
Registriert seit: 18.04.2005
Beiträge: 1.541
PHP-Kenntnisse:
Fortgeschritten
DER_Brain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

bin ma ned sicher, aber wird hier nicht nur genau 1 zeichen verlangt?

Code:
RewriteRule ([a-zA-z0-9,-_]*) index.php?RequestPath=$1

kenn mich aber mit regex ned so aus, kann sein, dass es totaler blödsinn is..



lg
Andi
DER_Brain ist offline   Mit Zitat antworten
Alt 25.07.2007, 13:15  
Benutzer
 
Registriert seit: 05.10.2004
Beiträge: 66
Stinger
Stinger eine Nachricht über ICQ schicken
Standard

hm, wenn ich das so wie du sagst mache, bekommen ich als requestpath 'index.php'.
Stinger ist offline   Mit Zitat antworten
Alt 25.07.2007, 13:23  
Benutzer
 
Registriert seit: 05.10.2004
Beiträge: 66
Stinger
Stinger eine Nachricht über ICQ schicken
Standard

habe das Problem gelöst

Code:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([a-z]*)([0-9,]*) $1.php?RequestPath=$2
thx 4 help
Stinger ist offline   Mit Zitat antworten
Alt 25.07.2007, 13:34  
Erfahrener Benutzer
 
Benutzerbild von DER_Brain
 
Registriert seit: 18.04.2005
Beiträge: 1.541
PHP-Kenntnisse:
Fortgeschritten
DER_Brain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

die gehören natürlich weg.. mein fehler, wollte hier drinnen den bb code verwenden

aber wenns mit deiner methode funktioniert, dann passts eh ^^
DER_Brain ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Parameter überschreiben Igäl PHP Tipps 2006 8 04.06.2006 19:55

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mod rewrite php parameter, rewrite php parameter, mod_rewrite php parameter, rewriterule www hinzufügen, rewriterule a-z 0-9, rewriterule index wegnehmen, rewriterule parameter hinzufügen, mod rewrite überprüfen wie viele params, mod_rewrite dritter parameter, mod_rewrite url php parameter, mod_rewrite fehlermeldung wenn parameter fehlen, parameter aus url bei mod_rewrite php, mod_rewrite parameter übergeben, mod_rewrite php parameters, mod_rewrite viele parameter, mod_rewrite parameter prüfen, mod_rewrite beliebig viele parameetr, mod rewrite komma, htaccess rewrite php parameter, php rewrite parameter

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:44 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.