TCZ27: .htaccess überschreibt reale Datei

Servus!

Ich verwende folgde rule in der .htaccess

RewriteCond %{REQUEST_URI} mittweida.php(.*)$
RewriteRule mittweida.php(.*)$ test.php [L]

Soweit sao gut.

Nun verlinke ich auch auf eine real existierende Datei test_mittweida.php

Hier greift die htaccess und obwohl die Datei test_mittweida.php existiert werde ich auf test.php geleitet.

Wie kann ich das lösen?

Grüße, Tom

  1. Ich verwende folgde rule in der .htaccess

    RewriteCond %{REQUEST_URI} mittweida.php(.*)$
    RewriteRule mittweida.php(.*)$ test.php [L]

    Soweit sao gut.

    Nee.

    • Die RewriteCond-Zeile ist restlos überflüssig. Du prüfst bereits mit RewriteRule, ob die URL mittweida.php enthält, dann musst du das nicht nochmal mit RewriteCond wiederholen.
    • Den Punkt vorm "php" möchtest du doch sicher als Punkt erkannt haben. Also maskiere ihn, damit er nicht seine normale Funktion als Platzhalter übernimmt: "mittweida.php".
    • Wenn du nichts aus dem Muster übernehmen möchtest, musst du auch keine runden Klammern setzen.
    • .*$ kannst du genauso gut gänzlich weglassen, denn "irgendwas und Ende" ist dasselbe wie "offenes Ende".

    Ergo:

    RewriteRule mittweida.php test.php [L]

    Nun verlinke ich auch auf eine real existierende Datei test_mittweida.php

    Hier greift die htaccess und obwohl die Datei test_mittweida.php existiert werde ich auf test.php geleitet.

    mod_rewrite arbeitet mit URLs und kümmert sich nicht darum, ob irgendwas auf dem Server existiert oder nicht (jedenfalls nicht ohne Aufforderung).

    Wie kann ich das lösen?

    Wie möchtest du es lösen? Möchtest du, dass die Änderung nur bei nicht existierenden Dateien greift? Oder möchtest du, dass die Änderung nur bei mittweida.php greift?

    1. Ich verwende folgde rule in der .htaccess

      RewriteCond %{REQUEST_URI} mittweida.php(.*)$
      RewriteRule mittweida.php(.*)$ test.php [L]

      Soweit sao gut.

      Nee.

      • Die RewriteCond-Zeile ist restlos überflüssig. Du prüfst bereits mit RewriteRule, ob die URL mittweida.php enthält, dann musst du das nicht nochmal mit RewriteCond wiederholen.
      • Den Punkt vorm "php" möchtest du doch sicher als Punkt erkannt haben. Also maskiere ihn, damit er nicht seine normale Funktion als Platzhalter übernimmt: "mittweida.php".
      • Wenn du nichts aus dem Muster übernehmen möchtest, musst du auch keine runden Klammern setzen.
      • .*$ kannst du genauso gut gänzlich weglassen, denn "irgendwas und Ende" ist dasselbe wie "offenes Ende".

      Ergo:

      RewriteRule mittweida.php test.php [L]

      Nun verlinke ich auch auf eine real existierende Datei test_mittweida.php

      Hier greift die htaccess und obwohl die Datei test_mittweida.php existiert werde ich auf test.php geleitet.

      mod_rewrite arbeitet mit URLs und kümmert sich nicht darum, ob irgendwas auf dem Server existiert oder nicht (jedenfalls nicht ohne Aufforderung).

      Wie kann ich das lösen?

      Wie möchtest du es lösen? Möchtest du, dass die Änderung nur bei nicht existierenden Dateien greift? Oder möchtest du, dass die Änderung nur bei mittweida.php greift?

      Ich möchte dass die Änderung nur bei mittweide.php greit, das aber bei z.B. test_mittweide.php die real existierende Datei auf dem Server verwendet wird.

      1. Mahlzeit,

        TUFO bzw. FOTU ist nicht viel besser als TOFU - bitte zitiere nur das, auf das Du auch antwortest. Danke.

        Ich möchte dass die Änderung nur bei mittweide.php greit, das aber bei z.B. test_mittweide.php die real existierende Datei auf dem Server verwendet wird.

        Dazu sollte die Regel nur angewendet werden, wenn die angeforderte Datei nicht existiert:

          
        RewriteCond %{REQUEST_FILENAME} !-f  
        RewriteRule mittweida\.php test.php [L]
        

        Generell würde ich Dir die Lektüre des Apache URL Rewriting Guide empfehlen.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Ich möchte dass die Änderung nur bei mittweide.php greit, das aber bei z.B. test_mittweide.php die real existierende Datei auf dem Server verwendet wird.

          Dazu sollte die Regel nur angewendet werden, wenn die angeforderte Datei nicht existiert:

          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteRule mittweida.php test.php [L]

            
          Wenn sie nur bei mittweida.php greifen soll, dann geht das noch kürzer und schneller:  
            
          RewriteRule ^mittweida\.php$ test.php [L]  
            
          Der eigentliche Fehler im Original war also, dass zwar ein festes Ende vorgesehen war ($), aber kein fester Anfang (^).  
            
          Vor RewriteRule in einer .htaccess sollte übrigens immer eine RewriteBase-Zeile stehen, die die URL zum jeweiligen Verzeichnis angibt, und sei es nur "RewriteBase /".