2012-04-03 5 views
0

gespeichert Ich kann nicht herausfinden, warum die unten nichtApache ModRewrite Muster nicht

RewriteCond ${foobar:test:$1}^
RewriteRule ^/?(.*)$ /check.php?url=$1 [L] 

foobar ist ein Programm (einfache Bash-Skript) funktioniert und aus ihm Ich schreibe, um zu sehen, was die Datei Eingabe ist. check.php ist ein einfaches PHP-Skript, das den Inhalt von GET anzeigt. Hier ist, was ich bekomme, wenn ich den regulären Ausdruck ($1) sowohl mit dem Shell-Skript und dem PHP-Skript übergeben:

url       check.php    foobar 

www.example.com/index.html index.html   test: 
www.example.com/index.php index.php    test: 
www.example.com/test.html test.html    test: 

im Grunde wird das Muster innerhalb der RewriteRule erkannt, aber nicht um den Parameter foobar.

Hinweis: Mit dem Shell-Skript ist nichts falsch. Wenn stattdessen ich es wie so ${foobar:test:abc123} nennen, ist der Ausgang „test:abc123

Antwort

1

Aus meiner Sicht:

RewriteCond ${foobar:test:$1}^

die erste $1 ein Nicht-Sinn, weil $1 zu einem früheren beziehen sollte Ausdruck, wie:

RewriteRule ^/?(.*)$ /check.php?url=$1 [L] 

So bekomme ich nicht, wie dies funktionieren könnte, und wenn etwas funktioniert, es ist ... seltsam.

Siehe http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritemap

Vielleicht so etwas wie:

RewriteRule ^(.*)$ ${foobar:test:$1} [R,L,NC] 

arbeiten kann.