Die regulären Audrücke in der Apache-Implementation sind zum einen lange nicht so mächtig wie in Perl,
Ist der Unterschied zw. PCRE und der built-in Implementierung in Perl so groß? (Gilt natürlich nicht für Apache 1.3, der die POSIX extended regEx library verwendet).
Es gibt anscheinend auch Unterschiede zw. RewriteRule und RedirectMatch Permanent, der meines Erachtens noch den Slash braucht.
Das kommt drauf an. :-) mod_alias prüft immer gegen den URI-path (r->uri), der natürlich immer mit einem führenden Slash beginnt. Das macht mod_rewrite im Serverkontext auch, im Verzeichniskontext (u.a. .htaccess-Dateien) aber nicht. Dort prüfst du gegen einen lokalen physischen Pfad. D.h. von /var/www/foo wird bei einer Notation in /var/www/.htaccess das Verzeichnisprefix /var/www/ entfernt, sodass der reguläre Ausdruck auf letztendlich auf "foo" geprüft wird.
Das meiste Durcheinander entsteht eigentlich durch das unterschiedliche Verhalten je nach Kontext verbunden mit dem Nichtfunktionieren bestimmter Beispiele je nach Kontext. Mit zwei unterschiedlichen Direktiven wäre man wohl besser gefahren...
Du kannst also schreiben:
RewriteRule ^edit/foo/bar/(.*) http://example.org/$1.php
Das kann der OP schreiben, aber oberhalb seiner anderen Regel. Vom Speziellen zum Generellen. Die Conditions werden nach der RegEx der RewriteRule geprüft, sodass diese eigentlich hier entfallen können.
RewriteRule ^edit/([a-zA-Z0-9]+.html)$ /page_edit.php?k=$1 [L]
RewriteRule ^([a-zA-Z0-9]+.html)$ /page.php?k=$1 [L]