Zur Navigation

.php Endung verbieten

1 Spawn (Gast)

Hallo,

ich möchte gern unterbinden das die Eingabe von .php untersagt wird.

Sobald der User .php eingibt soll eine Weiterleitung auf die 404 Seite stattfinden.
http://www.meinSeite.de/index.php - jetzt soll eine Weiterleitung an die 404 stattfinden, soll aber für alle Datein die auf .php enden gelten.

Aktuell habe ich per .htaccess die Ausgabe wie folgt, jedoch ist es möglich die Endung .php mit einzugeben
http://www.meinSeite.de/index

Mein .htaccess Code
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Wie ist es also möglich die Eingabe der .php zu verbieten.

Vorab vielen Dank für das Feedback :-)

01.11.2019 12:49

2 Jörg Kruse

Mit dem Flag [G] kann ein Status Code 410 "Gone" gesetzt werden:

RewriteCond %{THE_REQUEST} \.php
RewriteRule \.php$ - [G]

Damit wird dem Client mitgeteilt, dass die Ressource dauerhaft nicht verfügbar ist. Bei einem Status Code 404 "Not Found" (welcher nicht durch mod_rewrite gesetzt werden kann) ist das nur vorübergehend der Fall.

01.11.2019 13:05 | geändert: 01.11.2019 13:07

3 Spawn (Gast)

Danke Dir Jörg, funzt perfekt. Der Server spuckt jetzt ein 410 aus, aber den kann man ja umleiten auf die 404 :-)

Viele Grüße

01.11.2019 13:25

4 Jörg Kruse

Ich denke nicht, dass eine Weiterleitung auf eine Seite sinnvoll ist, die einen Status Code 404 ausgibt. Wie oben schon geschrieben, informiert der Webserver mit dem Status Code 410 in angemessener Weise darüber, dass es die Seite schlichtweg nicht gibt, während ein 404 bedeutet, das er sie im Moment gerade nicht findet (was auch technische Gründe haben kann). Wenn du erst einen Status Code 410 ausgibst, dann mit Status 301 oder 302 weiterleitest, um am Ende einen Status 404 auszugeben, ist das speziell für Suchmaschinenbots nicht vernünftig zu interpretieren. Die Aussage 404 "Not Found" müsste logischerweise auf das Weiterleitungsziel bezogen werden und nicht auf die .php URL.

Wenn es dir darum geht, den Besuchern eine ähnliche Fehlerseite auszugeben, kannst du das mit der ErrorDocument-Direktive bewerkstelligen, z.B.:

ErrorDocument 404 /error/404.html
ErrorDocument 410 /error/410.html

Du kannst dann 404.html und 410.html auf ähnliche (oder gleiche) Weise gestalten.

01.11.2019 14:07 | geändert: 01.11.2019 14:10

5 Spawn (Gast)

Sorry Jörg, da hatte ich mich falsch ausgedrückt, ich habe keine WEiterleitung drin. Ich habe es ebenfalls über

ErrorDocument 404 /error/404.html
ErrorDocument 410 /error/410.html

gelöst.

Ich bräuchte aber nochmal deine Hilfe. Ich hatte vergessen zu erwähnen, dass es auch einen Adminbereich gibt, sprich der Ordner sollte quasi von der Regelung

RewriteCond %{THE_REQUEST} \.php
RewriteRule \.php$ - [G]

ausgenommen sein. Aktuell kann ich den Ordner leider nicht mehr aufrufen.
http://www.meinSeite.de/test/admin/index.php
Wie bekommt man es hin, dass diese URL jetzt wieder aufrufbar ist? Danke Dir vorab.

Viele Grüße

01.11.2019 14:17

6 Jörg Kruse

Du kannst eine entsprechende negative Bedingung davorschalten:

RewriteCond %{THE_REQUEST} ! /test/admin/
RewriteCond %{THE_REQUEST} \.php
RewriteRule \.php$ - [G]

Das "!" hat hierbei die Bedeutung von "nicht"

01.11.2019 14:27 | geändert: 01.11.2019 14:32

7 Spawn (Gast)

Hallo Jörg,

danke Dir für den Vorschlag. Leider erhalte ich vom Server eine Fehlermeldung.

Upstream server failed

Ist ein Telekom-Server, könnte es evtl. an dem liegen?

Bei der Telekom gibt es leider keine direkte .htaccess, hier muss man sich leider unter der ORdnerstruktur /home/www/denOrdner etc anlegen. Und in diesem legt man dann die httpd.conf ab, welche aber das Gleiche machen soll laut Telekom.

Hier mal mein gesamter Code.
<Directory /home/www/public_html/test/>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

RewriteCond %{THE_REQUEST} ! /test/admin/
RewriteCond %{THE_REQUEST} \.php
RewriteRule \.php$ - [G]

ErrorDocument 404 http://www.example.com/test/404
ErrorDocument 410 http://www.example.com/test/404
</Directory>

Ich habe es sowohl mit als ohne Test Ordner versucht, beides führt zum Fehler, Upstream server failed
RewriteCond %{THE_REQUEST} ! /test/admin/

Gibt es evtl. noch einen anderen Weg?

Danke, und viele Grüße

01.11.2019 16:01 | geändert von Jörg: 01.11.2019 16:10

8 Spawn (Gast)

Ah sry Jörg, ich hatte in meinem letzten Beitrag versehtnlich die Webadresse amit angegeben, kannst Du die bitte entfernen, danke Dir vielmals.

01.11.2019 16:03

9 Jörg Kruse

Ja, das Leerzeichen muss noch maskiert werden:

RewriteCond %{THE_REQUEST} !\ /test/admin/

01.11.2019 16:15

10 Spawn (Gast)

Vielen Dank Jörg, genial :-) funzt.

Eine letzte Frage hätte ich noch.

Wie muss man den folgenden Code anpassen
RewriteCond %{THE_REQUEST} !\ /test/admin/

damit man den Ordner "admin" umbennen kann er aber trotzdem noch über admin erreichbar bleibt, nur halt über einen anderen Namen.

http://www.meineSeite.de/test/admin
http://www.meineSeite.de/test/XYZ (aber XYZ geht trotzdem auf admin, alles andere nicht)

In etwa so?
RewriteCond %{THE_REQUEST} \ /admin
RewriteRule ^ - [G,L]
RewriteRule ^/?XYZ$ index.php

01.11.2019 16:43