Dieter Raber: mod_rewrite

Hallo alle,

Ich habe zugegebenermassen nicht viel recherchiert und habe es zudem etwas eilig. Mein Problem folgendermassen aus:
Ich schreibe eine URL um mit ^([0-9a-zA-Z_]*).htm$ index.php?topic=$1.
test.htm wird also zu index.php?topic=test umgeschrieben

Jetzt haette ich aber gerne, dass test.htm?foo=bar zu index.php?topic=test&foo=bar umsgeschrieben wird (potentiell beliebige Anzahl von Parametern). Mit einem Regexp in der Art ^([0-9a-zA-Z_]*).htm(?)?(.*)? geht das offenbar nicht, vermutlich ist auch irgendein ganz einfacher Weg vorgesehen.

Kann mir da bitte jemand weiterhelfen?

Gruß,

Dieter

  1. Hi,

    Jetzt haette ich aber gerne, dass test.htm?foo=bar zu index.php?topic=test&foo=bar umsgeschrieben wird (potentiell beliebige Anzahl von Parametern). Mit einem Regexp in der Art ^([0-9a-zA-Z_]*).htm(?)?(.*)? geht das offenbar nicht, vermutlich ist auch irgendein ganz einfacher Weg vorgesehen.

    hast Du das Query String Append Flag ausprobiert?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      Das scheint das Richtige zu sein, danke fuer die schnelle Hilfe!

      Gruß,

      Dieter

  2. Hallo Dieter.

    Ich schreibe eine URL um mit ^([0-9a-zA-Z_]*).htm$ index.php?topic=$1.
    test.htm wird also zu index.php?topic=test umgeschrieben

    Welchen Sinn hat es, eine mögliche Ressource namens „.htm“ zu „index.php?topic=“ umschreiben zu lassen?

    Einen schönen Freitag noch.

    Gruß, Ashura

    1. Hi,

      Welchen Sinn hat es, eine mögliche Ressource namens „.htm“ zu „index.php?topic=“ umschreiben zu lassen?

      welchen Sinn hat es, eine URI namens ".htm" zuzulassen? Bei der Standard-Konfiguration eines Apache wird da eh der Zugriff verweigert.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. hallo Cheatah,

        welchen Sinn hat es, eine URI namens ".htm" zuzulassen? Bei der Standard-Konfiguration eines Apache wird da eh der Zugriff verweigert.

        Das kenne ich anders. Als "Standard" wird die mitgelieferte Datei "mime.types" in die Konfiguration eingebunden (na gut, bei Apache 2.2 nicht mehr). Und solange dort eine Zeile
           text/html   html htm
        enthalten ist, wird auf derlei Dateien keineswegs der Zugriff verweigert. Du kannst deinen Apache selbstverständlich so konfigurieren, daß er so eine Verweigerungshaltung einnimmt - aber "Standard" ist das dann nicht mehr, wobei man sich eh prima darüber streiten kann, was denn wohl "Standard" bei Apache sein könnte.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        http://www.christoph-schnauss.de
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Hallo Christoph.

          welchen Sinn hat es, eine URI namens ".htm" zuzulassen? Bei der Standard-Konfiguration eines Apache wird da eh der Zugriff verweigert.

          Das kenne ich anders. Als "Standard" wird die mitgelieferte Datei "mime.types" in die Konfiguration eingebunden (na gut, bei Apache 2.2 nicht mehr). Und solange dort eine Zeile
             text/html   html htm
          enthalten ist, wird auf derlei Dateien keineswegs der Zugriff verweigert.

          Ich denke, dass Cheatah eher die folgende, in so gut wie jeder Apache-Konfiguration vorhandene Direktive meinte:

          <Files ~ "^\.ht">  
              Order allow,deny  
              Deny from all  
          </Files>
          

          Einen schönen Freitag noch.

          Gruß, Ashura

          1. hallo Ashura,

            Ich denke, dass Cheatah eher die folgende, in so gut wie jeder Apache-Konfiguration vorhandene Direktive meinte:

            <Files ~ "^.ht">

            Order allow,deny
                Deny from all
            </Files>

              
            öhm ... bei Cheatah sollte man vorsichtig bleiben mit Mutmaßungen darüber, was er gemeint haben könnte. Bei mir im übrigen auch - sofern es um den Apache geht.  
              
            Nein, \_das\_ hat Cheatah mit an Sicherheit grenzender Wahrscheinlichkeit nicht gemeint (so viel versteht er vom Apache gewiß). Das ist tatsächlich die "Standard"-Vorgabe dafür, daß .htaccess-Dateien nicht an irgendwelche anfragenden Clients ausgeliefert werden sollen (guckst du [hier](http://aktuell.de.selfhtml.org/artikel/server/apacheconf/scripts/windows_2_0_05.htm)). Es hat mit der Extension .htm gar nichts zu tun. Außerdem: URIs mit dem Namen ".htm" werden damit durchaus zugelassen - weil ihnen dieser Container gar nicht gilt. Die damit gemeinten Dateien werden lediglich nicht ausgeliefert, weil "deny from all" eine mehr als restriktive Vorgabe ist.  
              
              
            Grüße aus Berlin  
              
            Christoph S.
            
            -- 
            [Visitenkarte](http://community.de.selfhtml.org/visitenkarten/view.php?key=26)  
            <http://www.christoph-schnauss.de>  
              
            ss:| zu:) ls:& fo:) va:) sh:| rl:|  
            
            
            1. Hallo Christoph.

              öhm ... bei Cheatah sollte man vorsichtig bleiben mit Mutmaßungen darüber, was er gemeint haben könnte. Bei mir im übrigen auch - sofern es um den Apache geht.

              Weiß ich, weiß ich.

              Das ist tatsächlich die "Standard"-Vorgabe dafür, daß .htaccess-Dateien nicht an irgendwelche anfragenden Clients ausgeliefert werden sollen (guckst du hier).

              Nein. Es ist die Standardvorgabe für alle Dateien, die mit „.ht“ beginnen.

              Es hat mit der Extension .htm gar nichts zu tun.

              Was, wenn der Dateiname „.htm“ lautet?

              Die damit gemeinten Dateien werden lediglich nicht ausgeliefert, weil "deny from all" eine mehr als restriktive Vorgabe ist.

              Meine ich doch.

              Einen schönen Freitag noch.

              Gruß, Ashura

              1. hallo Ashura,

                Das ist tatsächlich die "Standard"-Vorgabe dafür, daß .htaccess-Dateien nicht an irgendwelche anfragenden Clients ausgeliefert werden sollen
                Nein. Es ist die Standardvorgabe für alle Dateien, die mit „.ht“ beginnen.

                ok, ein halber Punkt für dich. Womit die Dateien beginnen, ist völlig irrelevant, womit allerdings ihr Name beginnt, wird von diesem Konfigurationsschnipsel sehr wohl erfaßt.

                Es hat mit der Extension .htm gar nichts zu tun.
                Was, wenn der Dateiname „.htm“ lautet?

                Dann gibt es keine Extension ".htm", es sei denn, du legst eine Datei mit dem Namen ".htm.htm" an - die wird tatsächlich auch nicht ausgeliefert, aber alle Dateien mit Namen wie "datei.htm" sind vom in diesem Container formulierten Auslieferungsverbot nicht betroffen.

                Die damit gemeinten Dateien werden lediglich nicht ausgeliefert, weil "deny from all" eine mehr als restriktive Vorgabe ist.
                Meine ich doch.

                Sagst du aber nicht ;-)
                Heißt das, daß man jetzt auch anfangen muß, deine postings derart zu interpretieren, daß man danach sucht, was du vielleicht gemeint hast bzw. haben könntest, ohne ihm explizit Ausdruck zu verleihen?

                Grüße aus Berlin

                Christoph S.

                --
                Visitenkarte
                http://www.christoph-schnauss.de
                ss:| zu:) ls:& fo:) va:) sh:| rl:|
                1. Hallo Christoph.

                  Dann gibt es keine Extension ".htm", es sei denn, du legst eine Datei mit dem Namen ".htm.htm" an - die wird tatsächlich auch nicht ausgeliefert, aber alle Dateien mit Namen wie "datei.htm" sind vom in diesem Container formulierten Auslieferungsverbot nicht betroffen.

                  Wollte ich auch nicht implizieren.

                  Meine ich doch.

                  Sagst du aber nicht ;-)
                  Heißt das, daß man jetzt auch anfangen muß, deine postings derart zu interpretieren, daß man danach sucht, was du vielleicht gemeint hast bzw. haben könntest, ohne ihm explizit Ausdruck zu verleihen?

                  Nein, nicht nötig.
                  Ich werde meinerseits versuchen, mich deutlicher auszudrücken.

                  Einen schönen Freitag noch.

                  Gruß, Ashura

            2. Hi Christoph,

              öhm ... bei Cheatah sollte man vorsichtig bleiben mit Mutmaßungen darüber, was er gemeint haben könnte.

              LOL.

              Es hat mit der Extension .htm gar nichts zu tun.

              Extension?? Hat dich der Geist von Billy Gates völlig gepackt? MS DOS/Windows interpretiert den Teil nach dem (letzten) Punkt als Extension; für andere Systeme ist ein Punkt im Dateinamen nichts weiter als ein Punkt im Dateinamen. Für UNIX ist ein führender Punkt wieder was Besonderes.

              Live long and prosper,
              Gunnar

              --
              „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
              1. Hallo Gunnar.

                Extension?? Hat dich der Geist von Billy Gates völlig gepackt? MS DOS/Windows interpretiert den Teil nach dem (letzten) Punkt als Extension;

                Richtig. Und die grafische Oberfläche ist zu blöd, solche Dateinamen zuzulassen. Benenne ich eine solche Datei aber mittels Konsole, wird sie wundersamerweise angenommen.

                für andere Systeme ist ein Punkt im Dateinamen nichts weiter als ein Punkt im Dateinamen. Für UNIX ist ein führender Punkt wieder was Besonderes.

                Für GNU auch.

                Einen schönen Samstag noch.

                Gruß, Ashura

                1. Hallo Ashura,

                  Extension?? Hat dich der Geist von Billy Gates völlig gepackt? MS DOS/Windows interpretiert den Teil nach dem (letzten) Punkt als Extension;

                  Richtig. Und die grafische Oberfläche ist zu blöd, solche Dateinamen zuzulassen. Benenne ich eine solche Datei aber mittels Konsole, wird sie wundersamerweise angenommen.

                  schliesst man den Dateinamen in Anführungszeichen (die des Schreibmaschinensatzes) ein, so hat die grafische Oberfläche kein Problem mit solchen Namen.

                  Spezielle Ziele benötigen halt spezielle Mittelchen :-)

                  Freundliche Grüße

                  Vinzenz

                  1. Hallo Vinzenz.

                    schliesst man den Dateinamen in Anführungszeichen (die des Schreibmaschinensatzes) ein, so hat die grafische Oberfläche kein Problem mit solchen Namen.

                    Dies mag für Notepad gelten, aber hast du schon einmal versucht, auf diese Art und Weise eine Datei im Explorer umzubenennen?

                    Einen schönen Samstag noch.

                    Gruß, Ashura

                2. Hallo Freunde des gehobenen Forumsgenusses,

                  Richtig. Und die grafische Oberfläche ist zu blöd, solche Dateinamen zuzulassen. Benenne ich eine solche Datei aber mittels Konsole, wird sie wundersamerweise angenommen.

                  Ich habe hier eine Datei namens pfeil>.png unter Windows, die ich mit GIMP angelegt habe.
                  Ich kann sie aber nicht mehr löschen / öffnen / verändern (W2K), wenn ich sie löschen will
                  kommt folgende Fehlermeldung:

                  Cannot delete pfeil>: The filename, directory name or volume label syntax is incorrect

                  Weis jemand, woran das liegt?

                  Gruß
                  Alexander Brock

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

                    Cannot delete pfeil>: The filename, directory name or volume label syntax is incorrect

                    Weis jemand, woran das liegt?

                    Das Zeichen '>' ist in Dateinamen nicht erlaubt. Ich wundere mich, wie du es überhaupt da reinbekommen hast, eigentlich hätte Windows schon die Erstellung dieser Datei verweigern müssen (tut es im Allgemeinen auch, ich hab's gerade mal probiert).

                    Oft kannst du solche Bastarde aber durch Verwendung von Jokerzeichen noch von der Kommandozeile aus löschen:

                    del pfeil?.png

                    Seltsamerweise funktioniert auch das nicht immer...

                    Ciao,

                    Martin

                    --
                    Was du heute kannst besorgen,
                    das geht sicher auch noch morgen.
                  2. Hallo Alexander,

                    Ich habe hier eine Datei namens pfeil>.png unter Windows, die ich mit GIMP angelegt habe.

                    das hat GIMP klasse hingekriegt.

                    Ich kann sie aber nicht mehr löschen / öffnen / verändern (W2K), wenn ich sie löschen will
                    kommt folgende Fehlermeldung:

                    Cannot delete pfeil>: The filename, directory name or volume label syntax is incorrect

                    Wenn Martins Tipp nicht greift, könntest Du bei der Verwendung von FAT die FAT per Hexeditor bearbeiten, bei Verwendung von NTFS könntest Du die alte Methode für das Defragmentieren von NTFS-Datenträgern unter Windows NT 4.0 anwenden:
                    Sichere Deine Daten (bis auf die Spezialdatei) auf einen anderen Datenträger. Formatiere das Laufwerk. Kopiere die Daten zurück.

                    Es wäre ungünstig, wenn es sich um das Laufwerk mit Deiner Windows-Installation handelt :-)

                    Freundliche Grüße

                    Vinzenz

    2. Hallo Ashura,

      Das liegt daran, dass bei dieser Webseite Headerbereich, Navigation und Footer mehr oder weniger gleich sind und sich nur der Inhalt aendert. Ich uebergebe also via GET die jeweilige Topic und index.php includet eine Datei mit den eigentlichen Inhalten. Damit die URIs etwas netter aussehen und leichter zu merken sind, schreibe ich sie um.

      Genaugenommen wird in der index.php natuerlich noch ein bisschen mehr gemacht, etwa der Titel oder das Stylesheet beeinflusst, aber das Prinzip ist, dass die Inhalte von 'Plugindateien' namens contents/topic.inc.php generiert werden.

      Gruß,

      Dieter

      1. hallo Dieter,

        Das liegt daran, dass bei dieser Webseite Headerbereich, Navigation und Footer mehr oder weniger gleich sind und sich nur der Inhalt aendert.

        Das würde mir als Begründung für diese Art von Verrenkung nicht ausreichen. Mal abgesehen davon, daß dir Cheatah bereits den wichtigsten zielführenden Hinweis gegeben hat: Warum legst du auf deinem Server nicht gleich selbst PHP-Dateien bzw. Scripts an, die derlei Verrenkungen überflüssig machen?

        Damit die URIs etwas netter aussehen und leichter zu merken sind, schreibe ich sie um.

        Das halte ich nicht für eine stichhaltige Begründung.

        Genaugenommen wird in der index.php natuerlich noch ein bisschen mehr gemacht

        Das darf es ja gerne ...

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        http://www.christoph-schnauss.de
        ss:| zu:) ls:& fo:) va:) sh:| rl:|