hotti: .htacces Mod-Rewrite Problem

Beitrag lesen

hi,

Kann mir jemand helfen?

Es genügt eine Regel:

PicoBello

RewriteRule ^.*.htm   /cgi-bin/bello.cgi

Mach da mal nochn $ dran
RewriteRule ^.*.htm$   /cgi-bin/bello.cgi

damit wird die Regel exact bei .htm angezogen, ohne $ auch bei .html was evntl. nicht gewollt ist.

Zu den Parametern (Gefrickel):
Es ist schon möglich, bereits in der .htaccess den REQUEST_URI so zu parsen, dass $1, $2 usw an das Rewr.Ziel (hier: bello.cgi) übergeben werden können. Das Script würde jedoch aus diesen Parametern wiederum den Path zurückermitteln und das ist "mit der Kirche ums Dorf", genau das kannst du nämlich auch im Script selbst tun aus dem REQUEST_URI, der als Umgebungsvariable zur Verfügung steht.

In Perl würde das so aussehen:
use URI::Split qw(uri_split);

($scheme, $auth, $path, $query, $frag) = uri_split($uri);

Wobei ein REQUEST_URI so aussehen könnte:
http://example.com/x/y/index.htm?a=1&b=2#anker
                  ^  path       ^

und path als das was uns interessiert, ebenda zu finden ist. Path wird in einer Tabelle hinterlegt und schon kann das Script den richtigen Content dazu ausliefern, auch wenn es Parameter im Request gibt.

Willst Du die Parameter haben, siehe oben. Hat in der RewriteRule das Ziel bereits selbst Parameter, kannst Du mit [QSA] die REQUEST-Parameter "anhängen" und aus dem GET-Array lesen, Du kommst also so oder so dran an die Parameter, am einfachsten in der Variablen $query (ohne [QSA]-Flag QUERY String Append)

Bei QSA ist zu beachten, dass ein in der Rule fest vergebener Parameter like

RewriteRule Quelle Ziel?q=1 [QSA]

(hier q) im REQUEST_URI nicht berücksichtig werden kann, q ist immer =1, egal was im REQUEST_URI steht.

Mit PHP bist Du wahsaga auf [QSA] angewiesen, was ja auch geht, bis auf die genannte Einschränkung. Als Perl-Alternative für uri_split gibts auch in PHP entsprechende Funktionen.

Viele Grüße,
Horst Huckepack

--
Schneewittchen lebt!