Fabian St.: Probleme mit RewriteRule

Hi!

Ich mache gerade meine ersten Gehversuche mit mod_rewrite und bin dabei auf einige Probleme gestoßen:

Mittels folgender RewriteRule sollen Anfragen von http://erde/~fabi/info/einleitung.html auf http://erde/~fabi/info/index.php5?site=einleitung umgeleitet werden:

  
Options +FollowSymLinks  
RewriteEngine On  
RewriteBase /~fabi/info  
RewriteRule ^([a-z0-9]+)\.html$ /index.php5?site=$1  

Dies funktioniert auch. Doch wenn ich nun das '.html' in der RewriteRule weglasse [1] bekomme ich einen 404er - Not Found. Woran könnte dies liegen? In der rewrite_log steht in diesem Fall nämlich überhaupt nichts...

Grüße,
Fabian St.

[1] Damit Anfragen an http://erde/~fabi/info/einleitung auf http://erde/~fabi/info/index.php5?site=einleitung umgeleitet werden.

--
Meine Website: http://fabis-site.net
--> XHTML, CSS, PHP-Formmailer, Linux
---------------------
fabi@erde ~# whatis spam
spam: nothing appropriate
---------------------
Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
  1. Hi!

    Kleiner Nachtrag: Das Problem tritt auch im DOCUMENT_ROOT auf, d.h. auch ohne Verwendung von mod_userdir und der damit verbundenen Angabe der RewriteBase.

    Auf weitere Hilfen würde ich mich freuen...

    Grüße,
    Fabian St.

    --
    Meine Website: http://fabis-site.net
    --> XHTML, CSS, PHP-Formmailer, Linux
    ---------------------
    fabi@erde ~# whatis spam
    spam: nothing appropriate
    ---------------------
    Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
  2. hi,

    RewriteBase /~fabi/info
    RewriteRule ^([a-z0-9]+).html$ /index.php5?site=$1

    Dies funktioniert auch. Doch wenn ich nun das '.html' in der RewriteRule weglasse

    was bleibt dann als bedingung bei dir übrig?
    ^([a-z0-9]+)$
    oder
    ^([a-z0-9]+) (ohne $ am ende)
    ?

    bekomme ich einen 404er - Not Found. Woran könnte dies liegen?

    meine theorie wäre:
    wenn du die endung .html nicht in die bedingung einbeziehst - dann trifft die RewriteRule auch auf den _folgenden_ (internen) request zu - der geht nämlich auf index.php (plus query string, der beim rewriten aber unberücksichtigt bleibt).
    (gut, der punkt passt da nicht wirklich rein in [a-z0-9]
    aber zweite oben genannte variante ohne $ am ende könnte auch das erklären.)

    also wird der (interne) request seinerseits wieder von der regel abgegriffen, und auf /index.php5?site=index.php weitergeleitet, etc. pp.
    du hättest dich also in einem netten kleinen loop gefangen (unter der annahme, dass meine vermutung zutrifft).

    versuche also mal, die Rule um das flag [L] oder auch [NS] zu ergänzen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hi wahsaga!

      was bleibt dann als bedingung bei dir übrig?
      ^([a-z0-9]+)$
      oder
      ^([a-z0-9]+) (ohne $ am ende)
      ?

      In der Logs steht immer 'applying pattern ^([a-z0-9]+).html$ ...', sodass ich jetzt mal davon ausgehe, dass das $ stehenbleibt.

      Nach dem Hochsetzten des LogLevels erhalte ich nun folgende Ausgaben (für die Anfrage http://localhost/~fabi/info/links.html ---> http://localhost/~fabi/info/index.php5?site=links):

      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82b8700/initial] (3) [per-dir /home/fabi/public_html/info/] strip per-dir prefix: /home/fabi/public_html/info/links.html -> links.html
      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82b8700/initial] (3) [per-dir /home/fabi/public_html/info/] applying pattern '^([a-z0-9]+).html$' to uri 'links.html'
      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82b8700/initial] (2) [per-dir /home/fabi/public_html/info/] rewrite links.html -> index.php5?site=links
      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82b8700/initial] (3) split uri=index.php5?site=links -> uri=index.php5, args=site=links
      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82b8700/initial] (3) [per-dir /home/fabi/public_html/info/] add per-dir prefix: index.php5 -> /home/fabi/public_html/info/index.php5
      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82b8700/initial] (2) [per-dir /home/fabi/public_html/info/] trying to replace prefix /home/fabi/public_html/info/ with /~fabi/info
      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82b8700/initial] (5) strip matching prefix: /home/fabi/public_html/info/index.php5 -> index.php5
      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82b8700/initial] (4) add subst prefix: index.php5 -> /~fabi/info/index.php5
      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82b8700/initial] (1) [per-dir /home/fabi/public_html/info/] internal redirect with /~fabi/info/index.php5 [INTERNAL REDIRECT]
      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82c7978/initial/redir#1] (3) [per-dir /home/fabi/public_html/info/] strip per-dir prefix: /home/fabi/public_html/info/index.php5 -> index.php5
      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82c7978/initial/redir#1] (3) [per-dir /home/fabi/public_html/info/] applying pattern '^([a-z0-9]+).html$' to uri 'index.php5'
      127.0.0.1 - - [23/Mar/2005:00:08:35 +0100] [localhost/sid#80a0e48][rid#82c7978/initial/redir#1] (1) [per-dir /home/fabi/public_html/info/] pass through /home/fabi/public_html/info/index.php5

      Die .htaccess ist dabei folgende:

      Options +FollowSymLinks
      RewriteEngine On
      RewriteBase /~fabi/info
      RewriteRule ^([a-z0-9]+).html$ index.php5?site=$1 [L] [NS]

      Wenn ich nun jedoch folgende .htaccess verwende, bleibt die rewrite_log leer und eine Anfrage von http://localhost/~fabi/info/links wird nicht an http://localhost/~fabi/info/index.php5?site=links weitergeleitet, sondern ich bekomme - wie gesagt - einen 404er: The requested URL /~fabi/info/links was not found on this server.

      Options +FollowSymLinks
      RewriteEngine On
      RewriteBase /~fabi/info
      RewriteRule ^([a-z0-9]+)$ index.php5?site=$1 [L] [NS]

      meine theorie wäre:
      wenn du die endung .html nicht in die bedingung einbeziehst - dann trifft die RewriteRule auch auf den _folgenden_ (internen) request zu - der geht nämlich auf index.php (plus query string, der beim rewriten aber unberücksichtigt bleibt).
      (gut, der punkt passt da nicht wirklich rein in [a-z0-9]
      aber zweite oben genannte variante ohne $ am ende könnte auch das erklären.)

      also wird der (interne) request seinerseits wieder von der regel abgegriffen, und auf /index.php5?site=index.php weitergeleitet, etc. pp.
      du hättest dich also in einem netten kleinen loop gefangen (unter der annahme, dass meine vermutung zutrifft).

      Oh, ich glaube damit muss ich mich noch gründlicher auseinandersetzten... ;-)

      versuche also mal, die Rule um das flag [L] oder auch [NS] zu ergänzen.

      Wie du in obigen Beispielen sehen kannst, haben die beiden Flags _L_astRule und _N_o internal _S_ubrequest keine Wirkung :-/

      Das komische ist, dass es auf dem Webspace funktioniert, nur eben lokal nicht auf meinem Rechner.

      Grüße,
      Fabian St.

      --
      Meine Website: http://fabis-site.net
      --> XHTML, CSS, PHP-Formmailer, Linux
      ---------------------
      fabi@erde ~# whatis spam
      spam: nothing appropriate
      ---------------------
      Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
      1. hi,

        Wenn ich nun jedoch folgende .htaccess verwende, bleibt die rewrite_log leer und eine Anfrage von http://localhost/~fabi/info/links wird nicht an http://localhost/~fabi/info/index.php5?site=links weitergeleitet, sondern ich bekomme - wie gesagt - einen 404er

        hast du zufällig ein wirklich existierendes verzeichnis namens "links" oder eine datei namens "links[.irgendeine_endung]" im verzeichnis /~fabi/info ...?

        dann wärst du über MultiViews gestolpert, so wie ich auch seinerzeit.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hi wahsaga!

          Vielen, vielen Dank wahsaga, das wars ;-)

          hast du zufällig ein wirklich existierendes verzeichnis namens "links" oder eine datei namens "links[.irgendeine_endung]" im verzeichnis /~fabi/info ...?

          Ja, links.inc.php ;-)

          dann wärst du über MultiViews gestolpert, so wie ich auch seinerzeit.

          Mensch, ich habe gesucht, aber diesen Thread muss ich übersehen haben :-/

          Grüße,
          Fabian St.

          --
          Meine Website: http://fabis-site.net
          --> XHTML, CSS, PHP-Formmailer, Linux
          ---------------------
          fabi@erde ~# whatis spam
          spam: nothing appropriate
          ---------------------
          Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
          1. hi,

            dann wärst du über MultiViews gestolpert, so wie ich auch seinerzeit.

            Mensch, ich habe gesucht, aber diesen Thread muss ich übersehen haben :-/

            da muss man ja auch erst mal drauf kommen - mir fiel das damals, wie du siehst, auch im traum nicht ein.

            dabei ist es, wenn man's genauer bedenkt, nachvollziehbar - der apache wird halt in entscheidungsnöte gebracht, weil er nicht eindeutig weiß, was er tun soll.
            eine andere art von fehlermeldung würde ich mir in dem falle allerdings besser vorstellen können ...

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }