carsten schlichting: .htacces | mod_rewrite | images haben falsche url

Hallo

Ich habe ein Problem mit .htacces dateien, genauergesagt mit mod_rewrite und die Hoffnung, dass mir hier jemand helfen kann.
Vielleicht ist das Problem sogar noch größer, wie unten beschrieben, da ich alles ersteinmal ohne die vollständige url ausprobiert habe.

später soll die url die an die index.php weitergeleitet wird einmal so aussehen.

domain.com/Kapitel1/Kapitel2/ZVE4D

momentan geht es um

domain.com

hier ist meine .htaccess datei...

RewriteEngine on
RewriteRule .+/images/(de|en)/php/images.php$ images/$1/php/images.php [L]
RewriteRule !.(js|ico|gif|jpe?g|png|css|xml|xsl|html|image)$ index.php [L]

Die 1. und 3. Zeile funktioniert, aber leider die 2. nicht.

die 2. funktionoiert allerdings so:

RewriteRule .+images.php$ images/de/php/images.php [L]
..aber hier würde dann dass mit de|en fehlen ??

kann mir da jemand helfen ??

Grüße aus Berlin
carsten

  1. Hallo,

    RewriteEngine on
    RewriteRule .+/images/(de|en)/php/images.php$ images/$1/php/images.php [L]
    RewriteRule !.(js|ico|gif|jpe?g|png|css|xml|xsl|html|image)$ index.php [L]

    Die 1. und 3. Zeile funktioniert, aber leider die 2. nicht.

    die 2. funktionoiert allerdings so:

    RewriteRule .+images.php$ images/de/php/images.php [L]
    ..aber hier würde dann dass mit de|en fehlen ??

    kann mir da jemand helfen ??

    Slashs gehören mMn. nicht maskiert. Der Punkt schon, wenn es der Punkt sein soll und nicht Platzhalter für "irgendein Zeichen".

    ich nutze:

    RewriteRule ^(text1|text2|index.htm).* index.php [QSA,L]

    heißt: alles was _beginnt_ mit text1 oder text2 oder index.htm (der Punkt wird vielleicht als Wildcard interpretiert, macht ja nix, denn es könnte auch ein Punkt sein) und dannach irgendwas kommt, wird auf index.php rewritten. querystring bliebt, und L heißt finito glaub ich.

    Gruß

    jobo

    1. Hi

      danke für die Antwort

      Slashs gehören mMn. nicht maskiert. Der Punkt schon, wenn es der Punkt sein soll und nicht Platzhalter für "irgendein Zeichen".

      also ein Fehler war auch dass ich .+ am Anfang benutzt habe., es aber nichts zu suchen gab was .+ entsprach.

      .* bedeutet ja auch evnetuell kein Zeichen ... damit hat es dann funktioniert.

      ..
      mein erwähntes 2. problem hat sich auch fast von selbst gelöst..

      danke nochmal
      carsten

      1. Hallo

        eine Sache wollte ich noch posten, weil diese wirklich komisch ist.

        RewriteRule .*/(de|en)/php/images.php$  images/$1/php/images.php [L]

        funktioniert, wenn das "image" mit de/php/images.php angesteuert wird.

        aber dies funktioniert leider nicht ..

        RewriteRule .*/(de|en)/images.php$  images/$1/php/images.php [L]

        ..das "image" wurde hier mit de/images.php angesteuert.

        ??

        weiß zufällig jemand warum ?

        grüße carsten

        1. Hallo,

          schnellschuss: du läufst in eine endlosschleife, weil auch das rewrittene nochmal rewritten wird. ggf. mit rewritecond arbeiten zusäztlich, "nicht am anfang "images", wie auch immer das notiert wird.

          Gruß

          jobo

          1. schnellschuss: du läufst in eine endlosschleife, weil auch das rewrittene nochmal rewritten wird. ggf. mit rewritecond arbeiten zusäztlich, "nicht am anfang "images", wie auch immer das notiert wird.

            Hi

            aber sollte nicht [L] die .htaccess datei beenden, so dass gar keine schleife entstehen könnte?

            grüße und Danke

            carsten

            1. Hallo,

              ja, aber zu dieser schleife findest du hier einiges. denn die .htaccess wird beendet, aber die anfrage wird intern ja "rewritten", also neugeschrieben. die neugeschriebene anfrage muss dann die htaccess nochmal passieren. wenn sie dann matched, wird sie wieder rewritten. da ändert sich dann ggf. das $1 entsprechend. deswegen musst du das rewriteziel "aussperren". da bin ich mir recht sicher. wie gesagt, hier im forum wirst du dazu fündig.

              Gruß

              jobo

              1. Hallo,

                ja, aber zu dieser schleife findest du hier einiges. denn die .htaccess wird beendet, aber die anfrage wird intern ja "rewritten", also neugeschrieben. die neugeschriebene anfrage muss dann die htaccess nochmal passieren. wenn sie dann matched, wird sie wieder rewritten. da ändert sich dann ggf. das $1 entsprechend. deswegen musst du das rewriteziel "aussperren". da bin ich mir recht sicher. wie gesagt, hier im forum wirst du dazu fündig.

                s.a.

                "Der Apache ist mit dem Analysieren des Requests schon fast fertig, wenn er aus eine .htaccess trifft. Er hat bereits aus der URL einen Dateinamen ermittelt, denn sonst wüsste er ja auch nicht, welche .htaccess zuständig ist. Und nun kommt da Rewrite-Zeug drin vor, was auf die bereits ad acta gelegte URL zugreift und das bereits erledigte Dateinamenermitteln nochmal durchführen will. Das funktioniert nur, indem mod_rewrite nach seiner Umschreiberei einen internen Redirect auslöst. Und diesen wertet der Apache wieder von vorn an aus."

                http://forum.de.selfhtml.org/archiv/2008/5/t170571/#m1115241

                Gruß

                jobo

                1. Hi nochmal

                  ich kriegs einfach nicht hin .. hat nicht irgendjemand noch einen tip ?? :

                  dies ist meine .htaccess

                  RewriteEngine on
                  Rewritecond %{REQUEST_FILENAME} !-f
                  RewriteCond %{REQUEST_FILENAME} !-d
                  RewriteRule .*/(de|en)/(.+?).(gif|jpe?g|png)$ images/$1/$2.$3 [L]

                  RewriteRule .*/(de|en)/img.php$ images/$1/php/img.php [L]
                  RewriteRule .*/images/(de|en)/php/img.php$  images/$1/php/img.php [L]

                  RewriteRule !.(js|ico|gif|jpe?g|png|css|xml|xsl|html|image)$ index.php [L]

                  hiermit:
                  RewriteRule .*/(de|en)/img.php$ images/$1/php/img.php [L]
                  RewriteRule .*/images/(de|en)/php/img.php$  images/$1/php/img.php [L]

                  müßte doch auch trotz schleife die richtige url am Ende rauskomen ??

                  funktioniert aber nicht..
                  die anderen Sachen funktionieren aber..

                  grüße carsten

                  1. Hallo,

                    dies ist meine .htaccess

                    RewriteEngine on
                    Rewritecond %{REQUEST_FILENAME} !-f
                    RewriteCond %{REQUEST_FILENAME} !-d
                    RewriteRule .*/(de|en)/(.+?).(gif|jpe?g|png)$ images/$1/$2.$3 [L]

                    RewriteRule .*/(de|en)/img.php$ images/$1/php/img.php [L]
                    RewriteRule .*/images/(de|en)/php/img.php$  images/$1/php/img.php [L]

                    RewriteRule !.(js|ico|gif|jpe?g|png|css|xml|xsl|html|image)$ index.php [L]

                    hiermit:
                    RewriteRule .*/(de|en)/img.php$ images/$1/php/img.php [L]
                    RewriteRule .*/images/(de|en)/php/img.php$  images/$1/php/img.php [L]

                    müßte doch auch trotz schleife die richtige url am Ende rauskomen ??

                    funktioniert aber nicht..
                    die anderen Sachen funktionieren aber..

                    Was funktioniert denn nun und was nicht?

                    Beim zweiten würde doch "images/en/php/img.php" zu images/en/php/img.php.

                    Mach doch mal testweise
                    RewriteRule .*/images/(de|en)/php/img.php$  testfolder/$1/php/img.php [L]

                    Gruß

                    jobo

                    1. hi

                      Beim zweiten würde doch "images/en/php/img.php" zu images/en/php/img.php.

                      ...images/en/php/img.php ist ja der wirkliche pfad ... bzw. images/de/php/img.php

                      und das ist doch gut so - oder ?

                      Mach doch mal testweise
                      RewriteRule .*/images/(de|en)/php/img.php$  testfolder/$1/php/img.php [L]

                      hab ich gemacht, ist aber auch nichts passiert.

                      habe es auch nocheinmal mit einem sessionunabhängigen image.php script versucht, und funktioniert auch nicht ... im Falle dass es daran gelegen hätte , dass die session nicht richtig gespeichert worden wäre...

                      es liegt vielleicht an der rewriterule die die index.php betrifft??
                      Vielleicht sollte ich die images auch über die index.php ausgeben?

                      das problem ist auch, dann man gar nicht richtig nachvollziehen kann, was da eigentlich auf dem server passiert?

                      grüße und Danke
                      carsten

                      1. Hallo,

                        ich kanns leider nicht komplett nachvollziehen. in dem zustand aber würde ich meinen standardspruch abgeben und mutmaßen, dass du das "problem" noch nicht richtig "isoliert" hast. ein test, die eine, zwei oder drei zeilen dazu, für _ein_ problem. insbesondere keine kombinationen. also wie du machtest, erstmal ohne session z.b..

                        Gruß

                        jobo