Phil: mod_rewrite Rule

In der .htaccess werden alle html-seiten intern auf eine
Index.php weitergeleitet und ausgewertet.

RewriteEngine  on
RewriteRule  ^([a-zA-Z0-9/-]*).html$ /index.php?$1.html

Nun soll die index.php nicht direkt aufrufbar sein.

RewriteEngine  on
RewriteRule  ^([a-zA-Z0-9/-]*).html$ /index.php?$1.html

RewriteRule  ^.*.html$ /error404.php?

funktioniert natürlich nicht. Ich habe diverse Flags ohne
Erfolg getestet.
Man könnte die 404 Weiterleitung z.B überspringen, wenn
Rule 1 zutrifft.

Was muss man eintragen für eine art if - else Abfrage?

kann ich mit mod_rewrite auch intern auf ein dem ROOT
übergeornetes Verzeichniss verweisen?

  1. Nun soll die index.php nicht direkt aufrufbar sein.
    RewriteRule  ^.*.html$ /error404.php?

    Warum sehe ich hier .html ?

    funktioniert natürlich nicht. Ich habe diverse Flags ohne
    Erfolg getestet.
    Man könnte die 404 Weiterleitung z.B überspringen, wenn
    Rule 1 zutrifft.
    Was muss man eintragen für eine art if - else Abfrage?

    Wenn eine Regel intern angewendet werden soll, ist [L] der das richtige Flag.

    kann ich mit mod_rewrite auch intern auf ein dem ROOT
    übergeornetes Verzeichniss verweisen?

    Nein. Mod_rewrite Zugriffe sind http Zugriffe. Das heisst, auch sie unterliegen .htaccess Regeln.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Warum sehe ich hier .html ?

      Heißt natürlich:
      RewriteRule  ^.*\index.php$ /error404.php?

      Wenn eine Regel intern angewendet werden soll, ist [L] der das richtige Flag.

      Habe ich versucht, ich komme immer auf sie 404-Seite. Kannst Du ein Beispiel
      machen?

      Phil

      1. Hi,

        RewriteRule  ^.*\index.php$ /error404.php?

        Wenn eine Regel intern angewendet werden soll, ist [L] der das richtige Flag.

        Habe ich versucht, ich komme immer auf sie 404-Seite.

        Natürlich, weil auch jeder umgeschriebene Request erneut durch die komplette Maschinerie geschickt wird - und damit wird dein zuvor auf index.php?irgendwas umgeschriebener Request hier dann auf die 404-Seite umgeschrieben.
        Das Flag [L] sorgt lediglich dafür, dass die Anwendung nachfolgender Regeln im aktuellen Durchgang nicht mehr erfolgt, es verhindert aber mitnichten den nächsten Durchgang.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. Natürlich, weil auch jeder umgeschriebene Request erneut durch die komplette Maschinerie geschickt wird - und damit wird dein zuvor auf index.php?irgendwas umgeschriebener Request hier dann auf die 404-Seite umgeschrieben.
          Das Flag [L] sorgt lediglich dafür, dass die Anwendung nachfolgender Regeln im aktuellen Durchgang nicht mehr erfolgt, es verhindert aber mitnichten den nächsten Durchgang.

          »»

          Ok, soweit ist mir das jetzt klar. Was ist mit dem NS (No Subrequest) Flag?
          Werde ich morgen früh testen.

          Danke,

          Phil

  2. Vom Prinzip:

    RewriteRule  ^.*index.php$ /error404.php?

    falls Bedingung nicht zutrifft:

    RewriteRule  ^([a-zA-Z0-9/-]*).html$ /index.php?$1.html

    bei www.example.de/index.html soll man auf die Seite kommen,
    bei www.example.de/index.php auf die Fehlerseite.

    1. RewriteRule  ^.*index.php$ /error404.php?
      falls Bedingung nicht zutrifft:
      RewriteRule  ^([a-zA-Z0-9/-]*).html$ /index.php?$1.html
      bei www.example.de/index.html soll man auf die Seite kommen,
      bei www.example.de/index.php auf die Fehlerseite.

      Du willst also, dass Apache bei seinem Versuch, deine Umleitung zu realisieren, auf ein 404 trifft?
      Macht keinen Sinn.

      Du kannst eventuell mit RewriteCond abfragen ob ein QueryString existiert, und im negativen Fall einen 404 ausgeben.

      mfg Beat

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische