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&param=$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&param=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&param=$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&param=$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&param=$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&param=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
--------------------------------------------------------------------------