Schrift
[thread]11206[/thread]

Mod Rewrite Frage

Leser: 1


<< >> 8 Einträge, 1 Seite
Froschpopo
 2008-01-28 17:51
#105286 #105286
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich habe eine Frage zu mod_rewrite!

Code: (dl )
RewriteRule ^/liste.html\?seite=([0-9]+)$ /cgi-bin/application.pl?id=liste&seite=$1 [PT]

Warum funktioniert das so nicht?
Linuxer
 2008-01-28 18:18
#105287 #105287
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Warum gibt es keine Fehlermeldung oder Beschreibung dessen, was statt des Erwarteten passiert?

Was steht im error_log?
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Froschpopo
 2008-01-28 18:21
#105288 #105288
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
das führt zu einem Fehler 404!
Im Log steht nur: File does not exist: /srv/www/xxx

Ich hatte in der Vergangenheit schonmal versucht, an den Query String heran zu kommen. Hab aber damals schon die verschiedensten Versuche aufgegeben.

Dies war einer davon:
Code: (dl )
RewriteRule ^/([a-zA-Z_0-9]+)\.html\?(.*)$ /cgi-bin/application.pl?id=$1&$2 [PT]


Ich wollte URLs nach folgendem Muster ausgeben:
http://localhost/param1.html?param2
GwenDragon
 2008-01-28 20:13
#105292 #105292
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Du kannst keinen Querystring in die URL schreiben bei RewriteRule.

Wieso löst du es nicht so:
Code: (dl )
RewriteRule ^/liste.html/seite([0-9]+)$ /cgi-bin/application.pl?id=liste&seite=$1 [PT]


Oder du verwendest /cgi-bin/application.pl gleich als Action.
Beispiel:

Code: (dl )
1
2
AddHandler my-file-type .html
Action my-file-type /cgi-bin/program.cgi



So ganz verstehe ich das nicht.
Wenn du eine Ulr mit liste.html?seite=88 hast und das an /cgi-bin/application.pl weiterreichst, brauchst du doch den Parameter seite nicht umzuschreiben. Den musst du eben in application.cgi auslesen.
pq
 2008-01-28 22:58
#105298 #105298
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
natürlich kann man auch den querystring abfragen, das geht mit RewriteCond. google liefert
da eine menge ergebnisse zu.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
GwenDragon
 2008-01-29 01:16
#105300 #105300
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Abfragen kann er ihn.
RewriteCond %{QUERY_STRING} .....
Aber er kann mid mod_rewrite QUERY_STRING nicht umschreiben.
Froschpopo
 2008-01-29 07:21
#105301 #105301
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich verwende nur ein einziges Script. Möchte dies aber nach außen anders aussehen lassen.

Beispiel:
Code: (dl )
RewriteRule ^/([a-zA-Z_0-9]+)\.html$ /cgi-bin/main.pl?id=$1

Doof wirds aber, wenn ich noch weitere Parameter an main.pl übergeben möchte, was nämlich durchaus sein kann.
Zum Beispiel von GwenDragon:
Es können eine Vielzahl von Parametern übergeben werden deren Reihenfolge nicht einheitlich ist und die auch nicht alle vorkommen müssen.
GwenDragon
 2008-01-29 13:29
#105319 #105319
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Du willt also eine suchmaschinenfreundliche URL, in der keine Parameter per ? übergeben werden, richtig?

Froschpopo+2008-01-29 06:21:34--
Doof wirds aber, wenn ich noch weitere Parameter an main.pl übergeben möchte, was nämlich durchaus sein kann.

Und wie machst du dann das jetzt?

Ansonsten geht es auch, die Teile per Komma abzuteilen ;)
Jedenfalls sind Komma als Pfad erlaubt nach RFC 1630

Beispiel:
Floerd.html,Alter,15,Groesse,185
wird dann zu
/cgi-bin/main.pl?id=Floerd;params="Alter,15,Groesse,185"

//EDIT: Geht so. Habe ich gerade auf meinem lokalen Apache getestet.
Code: (dl )
RewriteRule (.*)\.html(,)(.*)	/cgi-bin/env.pl?id=$1;parm="$3" [L]



Ein Aufruf von http://test/test.html,l,12,brat,89,test 889, liefert folgende Redirectvars:
Code: (dl )
1
2
3
REDIRECT_QUERY_STRING = id=test;parm="l,12,brat,89,test 889,"
REDIRECT_SCRIPT_URI = http://test/test.html,l,12,brat,89,test 889,
REDIRECT_SCRIPT_URL = /test.html,l,12,brat,89,test 889,



Mit Mod_Rewrite wie willst du das machen?
Wenn es eine Vielzahl von Parametern werden, dann kannst du das mit einer RewriteRule nicht sinnvoll lösen. Das würden riesige Regexe.

Da musst du die Parameter im CGI auslesen.
<< >> 8 Einträge, 1 Seite



View all threads created 2008-01-28 17:51.