homepicture-4: Mit .htaccess nicht existierenden Seiten einen 404 Status geben

Moin,
ich habe das Problem, dass meine Startseite www.example.com auch unter www.example.com/?gedoens=hallo (und vielen anderen erreichbar ist und von google so indexiert wurde. Weiss jemand, wie ich das mit .htaccess reparieren kann und den Server dazu bringe, nicht existierenden Seiten den Status 404 zu geben? Vielen Dank!

  1. Hi!

    ich habe das Problem, dass meine Startseite www.example.com auch unter www.example.com/?gedoens=hallo (und vielen anderen erreichbar ist und von google so indexiert wurde. Weiss jemand, wie ich das mit .htaccess reparieren kann und den Server dazu bringe, nicht existierenden Seiten den Status 404 zu geben?

    In der .htaccess kann man nur Dinge auswerten, die dem Apachen bekannt sind. Wenn der nicht weiß, dass das verarbeitende Script einen bestimmten Parameter nicht zu einem Resultat bringen kann, dann kann nicht der Apache die 404 generieren. Das muss dein Script tun. Im Apachen kannst du höchstens feststehende Werte behandeln, also gezielt auf bestimmte Querystrings (im Ganzen) testen und auf ein nicht existierendes Dokument umschreiben, damit er daraufhin 404 melden kann (wobei dieser letzte Satz ungeprüft ist, hab grad keinen Apachen da).

    Lo!

  2. ..den Server dazu bringe, nicht existierenden Seiten den Status 404 zu geben?

    Den Status: 404 Not found

    gibt der Webserver aus. Den kannst Du nicht übergeben, Du kannst jedoch mit

    ErrorDocument 404 /cgi-bin/404.cgi

    eine Seite angeben, die bei Status 404 aufgerufen wird.

    Hotti

    --
    Ein Hype hat auf meiner Seite keinen Platz.
    1. Hi!

      Den Status: 404 Not found
      gibt der Webserver aus. Den kannst Du nicht übergeben,

      Wieso nicht? Jedes Script, das in der Lage ist, dem Apachen eigene Header zu übergeben, kann dabei prinzipiell jeden Response-Status verwenden, auch 404 oder 500 oder sonstwas. Solange nicht eine anderweitige Konfiguration diesen Status überschreibt, gelangt der auch zum Client.

      Lo!

      1. h1,

        Den Status: 404 Not found
        gibt der Webserver aus. Den kannst Du nicht übergeben,

        Wieso nicht? Jedes Script, das in der Lage ist, dem Apachen eigene Header zu übergeben, kann dabei prinzipiell jeden Response-Status verwenden, auch 404 oder 500 oder sonstwas. Solange nicht eine anderweitige Konfiguration diesen Status überschreibt, gelangt der auch zum Client.

        Jedes Script, was das machen kann ist existent. Die Frage war, wie einer nicht existierenden Seite ein Status 404 gegeben werden kann.

        Hotti

        1. Hallo,

          Jedes Script, das in der Lage ist, dem Apachen eigene Header zu übergeben, kann dabei prinzipiell jeden Response-Status verwenden, auch 404 oder 500 oder sonstwas.
          Jedes Script, was das machen kann ist existent. Die Frage war, wie einer nicht existierenden Seite ein Status 404 gegeben werden kann.

          lies zwischen den Zeilen. Aus dem OP:

          [...] meine Startseite www.example.com auch unter www.example.com/?gedoens=hallo (und vielen anderen erreichbar ist ...

          Wenn es heißt "erreichbar", dann heißt das für mich, dass da auch irgendein Inhalt ausgeliefert wird - sonst würde der Server ja mit einem 404 antworten und die Frage wäre sinnlos. Also kann man auch auf diese Requests reagieren.
          Man darf "nicht existierende Seiten" hier nicht als "404 Not Found" verstehen, sondern als "existierende Seiten, die ich so nicht indiziert haben möchte".

          So long,
           Martin

          --
          Moskito, ergo summ.
          1. h1,

            lies zwischen den Zeilen. Aus dem OP:

            Komisch. Wenn ich malne Frage habe, liest keiner zwischen den Zeilen ;-)

            Hotti

            PS: Danke Struppi!!!!!!

              
            // kompakte Schreibweise, alles zusammen, aber Vorsicht, wegen der Uebersicht!  
            var myObject = {  
            	url:    "$ENV{SCRIPT_NAME}",  
            	params: readForm(),  
            	method: 'POST',  
              
            	call: function(){ ajaxRequest(this); },  
              
            	callback: function(response){  
            		this.hash = readParams(response);  
            		document.getElementById('ajaxhinweis').innerHTML = response;  
            		document.getElementById('r_name').innerHTML = this.hash.name;  
            		document.getElementById('r_vname').innerHTML = this.hash.vname;  
            		document.getElementById('r_ort').innerHTML = this.hash.ort;  
            	},  
            };  
              
            // Im onClick-Event: myObject.call();  
            
            
            --
            Heute ist das Perptumobil unterwegs ;-)
        2. Hi!

          Den Status: 404 Not found gibt der Webserver aus. Den kannst Du nicht übergeben,
          Wieso nicht? Jedes Script, das in der Lage ist, dem Apachen eigene Header zu übergeben, kann dabei prinzipiell jeden Response-Status verwenden, auch 404 oder 500 oder sonstwas. Solange nicht eine anderweitige Konfiguration diesen Status überschreibt, gelangt der auch zum Client.
          Jedes Script, was das machen kann ist existent. Die Frage war, wie einer nicht existierenden Seite ein Status 404 gegeben werden kann.

          Deine Antwort war zu generell formuliert. Aber auch deine jetzige Erklärung, was du meintest, kann ich nicht als richtig werten.

          Wenn im Falle example.com/?gedoens=hallo kein DirectoryIndex-Dokument existiert, dann gibt der Apache schon von sich aus 404 zurück und das Problem mit dem Querystring wäre gar nicht vorhanden. Da es aber offensichtlich doch vorhanden ist, muss also ein DirectoryIndex-Dokument existent sein, das diesen Querystring auswertet. Also muss dieses entscheiden, ob es den Querystring auswerten kann oder nicht und entsprechende Status-Codes liefern. Wenn es diese Auswertung nicht mehr machen kann, weil es ein statisches Dokument geworden ist, dann ist der Wunsch nicht erfüllbar. Da hilft nur mit mod_rewrite Requests umzuschreiben.

          Lo!

          1. das betrifft übrigens auch http://forum.de.selfhtml.org/?gedoens=hallo .Wenn jemand dann diese Seite irgendwo verlinkt wird sie sie auch irgendwann gelistet.
            LG

            1. Hi!

              das betrifft übrigens auch http://forum.de.selfhtml.org/?gedoens=hallo .Wenn jemand dann diese Seite irgendwo verlinkt wird sie sie auch irgendwann gelistet.

              Das ist ein nicht allein von dir lösbares Problem, denn die Falschverlinker müssen diese Verlinkung korrigieren. Du kannst zwar mit 404 reagieren, und den Suchmaschinen den Link ausreden, aber irgendwann kommen sie wieder am falschen Link vorbei und dann musst du wieder mit 404 antworten.

              Dass jemand beliebige Teile an einen Querstring anhängen kann, lässt sich nicht verhindern. Deine Reaktion darauf kannst du aber beinflussen.

              Du kannst einerseits auf die Auswertung der Parameter verzichten oder es geht technisch nicht (statisches Dokument). Dann kannst du auch nicht mit 404 antworten, wenn eine Seite prinzipiell gefunden wird, und sei es wie in deinem Fall das DirectoryIndex-Dokument.

              Du kannst alle Parameter auswerten und bei unerwarteten einen 404 werfen. Das verhindert aber auch das Bearbeiten der restlichen Parameter. (Es verhindert es nicht, aber es wäre unsinnig, 404 zu antworten und trotzdem zu arbeiten.)

              Oder du gehst den Mittelweg und wertest nur das Erwartete aus, ignorierst den Rest, was aber dann die Suchmaschinen auch als erfolgreiche Verarbeitung ansehen.

              Vielleicht ist es aber so, dass du nur ein statisches DirectoryIndex-Dokument ausgeben willst und überhaupt keinen Querystring erwartest. Dann, wie gesagt, stelle ich mir vor, dass man das mit einer RewriteRule/RewriteCond auf ein nicht existentes Dokument umschreiben kann, woraufhin der Apache den 404 wirft. Direkt einen Statuscode kann man nur bei Redirects angeben sowie 403 und 410 mit den Flags F(orbidden) und G(one).

              Ungetestet:

              RewriteCond %{QUERY_STRING} !=""
                RewriteRule .* gibsnich

              Lo!

    2. Hallo,

      Den Status: 404 Not found
      gibt der Webserver aus. Den kannst Du nicht übergeben

      ach was? Jedes PHP- oder Perl-Script kann einen Status 404 ausgeben. Und das mag sogar sinnvoll sein, wenn das Script aufgrund der Eingabedaten (URL) zum Ergebnis kommt, dass unter diesen Bedingungen das gewünschte Ergebnis nicht existiert.
      Beipsiel: Eine Webpräsenz, die alle Seiten über index.php?page=xy auswählt. Wird für den Parameter page ein ungültiger Wert übergeben, ist es sehr sinnvoll, wenn das Script selbst eine Fehlerseite ausgibt und diese mit Status 404 serviert.

      Ciao,
       Martin

      --
      Zwei Mäuse treiben's miteinander. Sagt der Mäuserich: "Hoffentlich ist nicht wieder alles für die Katz."