You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-de@httpd.apache.org by Christopher Gerharz <li...@cgerharz.de> on 2006/11/17 12:15:31 UTC
[OT?] mod_rewrite / Reg-Ex
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hallo Liste,
ich habe ein Problem mit mod_rewrite, genauer mit den Reg-Ex einer
RewriteRule:
> RewriteEngine on
>
> RewriteRule ^/(.+)/([a-z]+)-(.+)-.*\.html$ /landing.php?tab=$1&module=$2¶m=$3
> RewriteRule ^/(.+)/([a-z]+)-.*\.html$ /landing.php?tab=$1&module=$2
> RewriteRule ^/(.+)/([a-z]+).html$ /landing.php?tab=$1&module=$2
Folgendes Beispiel soll hier matchen, tut aber nicht (404 - Not Found):
/default/news-4-wir_gehen_online.html auf
landing.php?tab=default&module=news¶m=4
In der ersten Rule ist zusaetzlich noch ein Parameter "param", der etwas
wie "a=b&c=d" (natuerlich urlencodet) oder, wie im Beispiel, auch nur
einen einfachen String (eben je nach Modul) enthalten kann, damit
flexibel weitere Parameter ergaenzt werden sollen.
Das "wir_gehen_online" ist hier nur SEO und kann natuerlich weggeworfen
werden.
Durch die dritte Rule soll das ganze aber auch ohne den SEO-String
funktionieren.
Ich bin mittlerweile mit meinem Latein wirklich am Ende - zugegeben,
Reg-Ex war nie meine Staerke. ;)
Hat jemand eine Idee?
Danke vorab und Gruss,
Christopher Gerharz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (MingW32)
iD8DBQFFXZnT6k8b5IOi9YMRAoK2AKC0nYygELmDmHf4WlF67wq7XrqL6wCfQBVt
6U4yM1Yvq58G2vRsx4COlRw=
=MGpS
-----END PGP SIGNATURE-----
--------------------------------------------------------------------------
Apache HTTP Server Mailing List "users-de"
unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------
Re: [OT?] mod_rewrite / Reg-Ex
Posted by Max Dittrich <ma...@t-online.de>.
Hi,
Christopher Gerharz schrieb:
>
> Sebastian Kayser wrote:
> [...]
>
> danke fuer Deinen Tipp.
> Das Logfile (die richtige Anweisung lautet RewriteLog - ohne -File) hat
> mich auf die Spur gebracht, dass die Slashes am Anfang - warum auch
> immer - nicht mitgematcht werden.
Die URL auf die der reguläre Ausdruck angewendet wird ist bei
RewriteRules im Serverkontext (VirtualHost) und bei Verzeichniskontexten
(Directory, .htaccess) unterschiedlich:
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule
Wie Du selber gesehen hast, fehlt im Verzeichniskontext mindestens der
führende "/" - nämlich der Verzeichnisprefix.
>
> So komme ich zu folgender funktionierenden RegEx:
>
>> RewriteRule ^(.+)/([a-z]+)-(.+)-.*\.html$ /landing.php?tab=$1&module=$2¶m=$3
>> RewriteRule ^(.+)/([a-z]+)-.*\.html$ /landing.php?tab=$1&module=$2
>> RewriteRule ^(.+)/([a-z]+).html$ /landing.php?tab=$1&module=$2
>
> Das hat zwar immer noch nicht ganz den gewuenschten Zweck, da in manchen
> Faellen Parameter abgeschnitten werden, aber das ist jetzt noch bisschen
> Tueftelei. ;)
Da könnte Dir das Flag [QSA] am Ende Deiner RewriteRule weiterhelfen.
Dies übernimmt den Querystring aus der eigentlichen Anfrage und vereint
ihn mit den Parametern aus Deiner Ersetzung.
Grüsse,
.max
--------------------------------------------------------------------------
Apache HTTP Server Mailing List "users-de"
unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------
Re: [OT?] mod_rewrite / Reg-Ex
Posted by Christopher Gerharz <li...@cgerharz.de>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hallo Sebastian,
Sebastian Kayser wrote:
[...]
danke fuer Deinen Tipp.
Das Logfile (die richtige Anweisung lautet RewriteLog - ohne -File) hat
mich auf die Spur gebracht, dass die Slashes am Anfang - warum auch
immer - nicht mitgematcht werden.
So komme ich zu folgender funktionierenden RegEx:
> RewriteRule ^(.+)/([a-z]+)-(.+)-.*\.html$ /landing.php?tab=$1&module=$2¶m=$3
> RewriteRule ^(.+)/([a-z]+)-.*\.html$ /landing.php?tab=$1&module=$2
> RewriteRule ^(.+)/([a-z]+).html$ /landing.php?tab=$1&module=$2
Das hat zwar immer noch nicht ganz den gewuenschten Zweck, da in manchen
Faellen Parameter abgeschnitten werden, aber das ist jetzt noch bisschen
Tueftelei. ;)
Danke vielmals!!
>
> Sebastian
Christopher
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (MingW32)
iD8DBQFFdNo86k8b5IOi9YMRAuN+AJ4t/b5iIkgc5PMtrCXsXn59V/cR8QCgvBe3
CQ75ooxmMCtPVyCE28IQRH8=
=uiy3
-----END PGP SIGNATURE-----
--------------------------------------------------------------------------
Apache HTTP Server Mailing List "users-de"
unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------
Re: [OT?] mod_rewrite / Reg-Ex
Posted by Sebastian Kayser <ml...@skayser.de>.
* Christopher Gerharz <li...@cgerharz.de> wrote:
> ich habe ein Problem mit mod_rewrite, genauer mit den Reg-Ex einer
> RewriteRule:
>
> > RewriteEngine on
> >
> > RewriteRule ^/(.+)/([a-z]+)-(.+)-.*\.html$ /landing.php?tab=$1&module=$2¶m=$3
> > RewriteRule ^/(.+)/([a-z]+)-.*\.html$ /landing.php?tab=$1&module=$2
> > RewriteRule ^/(.+)/([a-z]+).html$ /landing.php?tab=$1&module=$2
>
> Folgendes Beispiel soll hier matchen, tut aber nicht (404 - Not Found):
>
> /default/news-4-wir_gehen_online.html auf
> landing.php?tab=default&module=news¶m=4
Regex-technisch passen sowohl Regel 1 als auch Regel 2 auf Dein Muster.
Was sagt denn das Logging von mod_rewrite zu der Anfrage?
RewriteLogFile /pfad/wohin/auch/immer
RewriteLogLevel 3
Sebastian
--------------------------------------------------------------------------
Apache HTTP Server Mailing List "users-de"
unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------