Ankündigung

Einklappen
Keine Ankündigung bisher.

mod_rewrite URL-Umleitung zu Dateien in Verzeichnissen, mit Slash nach Parameter

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mod_rewrite URL-Umleitung zu Dateien in Verzeichnissen, mit Slash nach Parameter

    Hallo, ich mache gerade Bekanntschaft mit mod rewrite. Meine .htaccess sieht folgendermaßen aus:
    Code:
    Options +FollowSymlinks
    RewriteEngine On
    RewriteRule ^(.+)\.htm$ 			http://example.com/index.php [R=302,NC]
    RewriteRule ^(.+)\.html				http://example.com/index.php [R=302,NC]
    RewriteRule ^mystyle.css$			/css/mystyle.css$1 [L]
    RewriteRule ^apply.php$				/index.php$1 [L]
    RewriteRule ^login.php$				/index.php$1 [L]
    RewriteRule ^messages.php$			/index.php$1 [L]
    RewriteRule ^list.php$	   			/extensions/user/listusers.php?group=$1 [L]
    RewriteRule ^user.php/id/(.*)$  	        /index.php?user_id=$1 [L]
    RewriteRule ^(.*)/$ 			 	/index.php
    ErrorDocument 404 				/index.php
    Es geht um die Umleitung bei Dateien. Zum Beispiel die mystyle.css, die im head mit
    Code:
    <link href="mystyle.css" media="screen" rel="stylesheet" type="text/css" />
    eingebunden wird und solange der Request auch nur einen Parameter und keinen Slash am Ende hat, klappt es auch, dass es die richtige Sheet einbindet.
    Code:
    http://www.example.com/foo     // klappt, Sheet wird eingebunden
    http://www.example.com/foo/    // klappt nicht, Sheet wird nicht eingebunden
    
    http://www.example.com/foo  -> view-source:http://www.example.com/mystyle.css   // ohne Slash am Ende und nur ein Parameter
    http://www.example.com/foo/ -> view-source:http://www.example.com/foo/mystyle.css   // mit Slash am Ende
    Würde mich freuen, wenn mich jemand aufklären könnte.

  • #2
    Zitat von karthago Beitrag anzeigen
    Würde mich freuen, wenn mich jemand aufklären könnte.
    Gerne - wenn du uns bitte noch mitteilst, worüber du aufgeklärt werden möchtest ...?


    Üblicherweise erspart man sich solche Probleme, in dem man externe Ressourcen einfach absolut zur Domain-Wurzel referenziert.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      Gerne - wenn du uns bitte noch mitteilst, worüber du aufgeklärt werden möchtest ...?
      Ok, ich werde versuchen, mein Anliegen ausführlicher zu beschreiben.
      Code:
      RewriteRule ^mystyle.css$	/css/mystyle.css$1 [L]
      Hiermit wird Apache doch gesagt, dass die mystyle.css die mit <link href="mystyle.css" ..> eingebunden wird, eigentlich im Ordner /css/mystyle.css zu finden ist. Apache glaubt mir das zunächst auch . Solange die URL Example Web Page oder www.example.com/foo lautet. Aber sobald die URL einen Slash am Ende bekommt, also www.example.com/foo/, will Apache die Scheet nicht einbinden. Ziehe ich im Quelltext <link href="mystyle.css"...> in die URL-Leiste, so sehe ich, dass es /foo/ für ein Verzeichnis hält, also http://www.example.com/foo/mystyle.css. Aber das soll es ja nicht. Mit einem Slash vor dem Sheetnamen [ <link href="/mystyle.css"...> ] bindet es die Sheet auch bei example.com/foo/bar/bimbim korrekt im Root, also http://www.example.com/mystyle.css.

      Wie müsste es richtig heißen, dem Apache zu sagen, dass ^mystyle.css$ nicht im Verzeichnis /foo/ ist, sondern immer im Root.

      PS: sorry übrigens, dass ich mein Problem sprachlich leider nicht besser rüberbringen kann.

      Kommentar


      • #4
        Zitat von karthago Beitrag anzeigen
        Code:
        RewriteRule ^mystyle.css$	/css/mystyle.css$1 [L]
        Hiermit wird Apache doch gesagt, dass die mystyle.css die mit <link href="mystyle.css" ..> eingebunden wird, eigentlich im Ordner /css/mystyle.css zu finden ist.
        Nein. Damit wird ihm gesagt, wenn eine Ressource mystyle.css angefordert wird, soll er /css/mystyle.css stattdessen ausliefern. (Ich nehme mal an, dass $1 ist da nur versehentlich ans Ende gerutscht - Sinn ergibt es an der Stelle nämlich keinen.)

        Apache glaubt mir das zunächst auch .
        Du glaubst, dass du ein Problem damit hättest, was der Apache dir glaubt - hast du aber nicht.
        Du hast ein Problem mit dem Verständnis davon, wie der Client aus relativen Pfadangaben absolute zusammensetzt.

        Solange die URL http://www.example.com oder www.example.com/foo lautet.
        So lange macht der Client aus deinem Verweis auf "mystyles.css" eine Anfrage nach http://www.example.com/mystyles.css

        Aber sobald die URL einen Slash am Ende bekommt, also www.example.com/foo/, will Apache die Scheet nicht einbinden. Ziehe ich im Quelltext <link href="mystyle.css"...> in die URL-Leiste, so sehe ich, dass es /foo/ für ein Verzeichnis hält, also http://www.example.com/foo/mystyle.css.
        Natürlich - so funktioniert das Zusammensetzen relativer Pfadangaben zu einer absoluten Adresse durch den Client nun mal.

        Mit einem Slash vor dem Sheetnamen [ <link href="/mystyle.css"...> ] bindet es die Sheet auch bei example.com/foo/bar/bimbim korrekt im Root, also http://www.example.com/mystyle.css.
        Ja, ebenso logisch.

        Wie müsste es richtig heißen, dem Apache zu sagen, dass ^mystyle.css$ nicht im Verzeichnis /foo/ ist, sondern immer im Root.
        Wenn du bereits herausgefunden hast, dass der Zugriff auf http://www.example.com/mystyle.css immer klappt, wenn du in deinen Dokumenten die Adresse als "/mystyle.css" angibst - welches Problem hast du dann jetzt eigentlich noch ...?
        [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

        Kommentar


        • #5
          Zitat von ChrisB Beitrag anzeigen
          welches Problem hast du dann jetzt eigentlich noch ...?
          Gar keins nicht hauen. Ich bin nur etwas unsicher und habe mich gefragt, ob das seine Richtigkeit hat.

          Nachtrag: ist es denn überhaupt möglich mit mod_rewrite zu sagen, dass es hier die absolute Domain-Wurzel (Zitat ChrisB) ist?
          Code:
          RewriteRule ^mystyle.css$	/css/mystyle.css$1 [L]
          also so etwas:
          Code:
          RewriteRule ^/mystyle.css$	/css/mystyle.css$1 [L]

          Kommentar

          Lädt...
          X