.htaccess: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
(ssl)
 
(22 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:HSDoku]]
Mit <code>.htaccess</code> Dateien innerhalb der Dokument-Verzeichnisse einer Domain (möglichst in ~/doms/example.com/.htaccess oder gezielt in Unterverzeichnissen subs/www ect. ), können Einstellungen des Apache Webservers konfiguriert werden.
[[Kategorie:WWW]]
 
Zum Beispiel kann angegeben werden, welches Apache-Modul für bestimmte Dateien (oder bestimmte Datei-Endungen) benutzt werden soll, wohin Dokumente verschoben worden sind, oder auch, wer Zugriff auf die Dateien hat.
 
 
 
== Einstellen von MIME-Typen ==
 
<syntaxhighlight lang=apache line>
# Download von Zertifikaten ermöglichen:
AddType application/x-x509-ca-cert .crt
</syntaxhighlight>
 
== Einstellen des im HTTP Header angegebenen Zeichensatzes ==
 
für .html Dateien:
<syntaxhighlight lang=apache line>
AddCharset UTF-8 .html
 
# oder
AddDefaultCharset UTF-8
</syntaxhighlight>
 
(für PHP Skripte siehe [[PHP]] )


Mit <code>.htaccess</code> Dateien innerhalb der Dokument-Verzeichnisse einer Domain (z.B in subs/www oder in  Unterverzeichnissen), können Einstellungen des Apache Webservers konfiguriert werden.
== Einstellen von Datei Handlern ==


Zum Beispiel kann angegeben werden, welches Apache-Modul für bestimmte Dateien (oder bestimmte Datei-Endungen) benutzt werden soll, wohin Dokumente verschoben worden sind, oder auch, wer Zugriff auf die Dateien hat.
<syntaxhighlight lang=apache line>
AddType application/x-httpd-phpcgi .php
Action application/x-httpd-phpcgi /fastcgi-bin/phpstub
</syntaxhighlight>


==Passwortschutz für Dateien==
==Passwortschutz für Dateien==


'''Achtung:''' Sofern der Zugriff http Zugriff auf die Dateien nicht automatisch auf https:// bzw. [[SSL]] umgeleitet wird, können die Passwörter unverschlüsselt übertragen werden!
'''Achtung:''' Sofern der Zugriff http Zugriff auf die Dateien nicht automatisch auf https:// bzw. [[TLS_/_SSL|SSL]] umgeleitet wird, können die Passwörter unverschlüsselt übertragen werden!


Zunächst wollen wir den Zugriff auf ein Unterverzeichnis unserer Beispiel-Domain per .htaccess einschränken. Dazu legen wir zunächst eine Passwort-Datei an. Am einfachsten lässt sich diese spezielle Passwort-Datei in einer Shell anlegen. Wir legen sie in das etc-Verzeichnis der Domain:
Zunächst wollen wir den Zugriff auf ein Unterverzeichnis unserer Beispiel-Domain per .htaccess einschränken. Dazu legen wir zunächst eine Passwort-Datei an. Am einfachsten lässt sich diese spezielle Passwort-Datei in einer Shell anlegen. Wir legen sie in das etc-Verzeichnis der Domain:


  xyz00-doms@hopi$ cd ~/doms/example.com/etc
<syntaxhighlight lang=bash>
  xyz00-doms@hopi$ htpasswd -c .htpasswd peter
xyz00-doms@hopi$ cd ~/doms/example.com/etc
  New password: *****
xyz00-doms@hopi$ htpasswd -c .htpasswd peter
  Re-type new password: *****
New password: *****
  xyz00-doms@hopi$
Re-type new password: *****
xyz00-doms@hopi$
</syntaxhighlight>


Beim ersten User, hier peter wird das Programm htpasswd mit der Option -c (create) aufgerufen, aber auch wirklich nur beim ersten mal, da sonst die Datei .htpasswd neu erzeugt werden würde und vorherige Einträge damit gelöscht wären.
Beim ersten User, hier peter wird das Programm htpasswd mit der Option -c (create) aufgerufen, aber auch wirklich nur beim ersten mal, da sonst die Datei .htpasswd neu erzeugt werden würde und vorherige Einträge damit gelöscht wären.
Zeile 22: Zeile 49:
Sollte es beim Versuch, die Datei anzulegen, zu der Fehlermeldung kommando htpasswd nicht bekannt kommen, dann müssen wir zunächst den Befehl lokalisieren und mit dem richtigen Pfad neu aufrufen:
Sollte es beim Versuch, die Datei anzulegen, zu der Fehlermeldung kommando htpasswd nicht bekannt kommen, dann müssen wir zunächst den Befehl lokalisieren und mit dem richtigen Pfad neu aufrufen:


  xyz00-doms@hopi$ locate htpasswd
<syntaxhighlight lang=bash>
  /usr/sbin/htpasswd
xyz00-doms@hopi$ locate htpasswd
  xyz00-doms@hopi$ /usr/sbin/htpasswd -c .htpasswd peter
/usr/sbin/htpasswd
xyz00-doms@hopi$ /usr/sbin/htpasswd -c .htpasswd peter
</syntaxhighlight>


Beim zweiten User erfolgt der Aufruf dann ohne die Option -c:
Beim zweiten User erfolgt der Aufruf dann ohne die Option -c:


  xyz00-doms@hopi$ htpasswd .htpasswd petra
<syntaxhighlight lang=bash>
  New password: *****
xyz00-doms@hopi$ htpasswd .htpasswd petra
  Re-type new password: *****
New password: *****
  xyz00-doms@hopi$
Re-type new password: *****
xyz00-doms@hopi$
</syntaxhighlight>


Die Sternchen * stehen selbstverständlich für das jeweilige Passwort, welches dem User zugeordnet werden soll.
Die Sternchen * stehen selbstverständlich für das jeweilige Passwort, welches dem User zugeordnet werden soll.


Diese Datei könnten wir auch einfach mit scp/pscp oder FTP hochladen, dabei stellt sich dann jedoch die Frage, wie wir sie erzeugen. Auf den meisten Windows-Systemen dürfte kein htpasswd-Kommando verfügbar sein. Für diese Fälle haben wir eine online-Version zur Verfügung gestellt: http://www.is4u.de/cgi-bin/mk-htpasswd.cgi ? die Ausgabe einfach mit Copy&Paste in eine Datei kopieren und diese hochladen.
Diese Datei könnten wir auch einfach mit scp/pscp oder FTP hochladen, dabei stellt sich dann jedoch die Frage, wie wir sie erzeugen. Auf den meisten Windows-Systemen dürfte kein htpasswd-Kommando verfügbar sein. Für diese Fälle gibt es eine online-Version z.b.: https://de.functions-online.com/crypt.html
die Ausgabe einfach mit Copy&Paste in eine Datei kopieren und diese hochladen.


Die so angelegte Passwort-Datei kann nun von einer oder mehreren .htaccess-Dateien verwendet werden. Dazu begeben wir uns in das zu schützende Verzeichnis und legen dort eine Datei .htaccess an. Dies kann wieder per Upload oder in einer Shell geschehen. Die Datei kann beispielsweise so aussehen:
Die so angelegte Passwort-Datei kann nun von einer oder mehreren .htaccess-Dateien verwendet werden. Dazu begeben wir uns in das zu schützende Verzeichnis und legen dort eine Datei .htaccess an. Dies kann wieder per Upload oder in einer Shell geschehen. Die Datei kann beispielsweise so aussehen:


  order allow,deny
<syntaxhighlight lang=apache line>
  allow from all
order allow,deny
  require valid-user
allow from all
  Authname "Privater Bereich, bitte Anmelden."
require valid-user
  Authtype Basic
Authname "Privater Bereich, bitte Anmelden."
  AuthUserFile /home/doms/example.com/etc/.htpasswd
Authtype Basic
AuthUserFile /home/doms/example.com/etc/.htpasswd
</syntaxhighlight>


Dabei verweist die letzte Zeile auf die von uns angelegte .htpasswd Datei. Zu beachten ist:
Dabei verweist die letzte Zeile auf die von uns angelegte .htpasswd Datei. Zu beachten ist:
Zeile 56: Zeile 90:


In PHP-Skripten kann mit Hilfe der automatisch global sichtbaren Variablen <code>$_ENV</code> auf die Umgebungsvariablen zugegriffen werden. Um die Variable <code>REDIRECT_REMOTE_USER</code> zu lesen, schreibt man also <code>$_ENV['REDIRECT_REMOTE_USER']</code>.
In PHP-Skripten kann mit Hilfe der automatisch global sichtbaren Variablen <code>$_ENV</code> auf die Umgebungsvariablen zugegriffen werden. Um die Variable <code>REDIRECT_REMOTE_USER</code> zu lesen, schreibt man also <code>$_ENV['REDIRECT_REMOTE_USER']</code>.
Anmerkung: Wer [[PHP via CGI installieren|PHP via CGI]] verwendet, muss entweder in seiner Kondigurationsdatei entweder bei <code>variables_order</code> ein "E" einfügen, damit <code>$_ENV</code> gesetzt wird, oder alternativ das Array <code>$_SERVER</code> verwenden.


== Redirects ==
== Redirects ==


Redirect permanent / http://www.example.com/
<syntaxhighlight lang=apache line>
 
Redirect permanent / http://www.example.com/
</syntaxhighlight>


== Rewrite Rules ==
== Rewrite Rules ==


RewriteEngine On
<syntaxhighlight lang=apache line>
RewriteRule ^mailman/(.*)$      /cgi-bin/mailman/$1
RewriteEngine On
 
RewriteRule ^mailman/(.*)$      /cgi-bin/mailman/$1
</syntaxhighlight>


== Nur SSL erlauben und automatisch umschalten ==
== Nur SSL erlauben und automatisch umschalten ==
Zeile 74: Zeile 108:
Bei per Symlink zusammengeschalteten Verzeichnissen, kann dies für die Verzeichnisse auf die nur per SSL zugegriffen werden soll, wie folgt erreicht werden:
Bei per Symlink zusammengeschalteten Verzeichnissen, kann dies für die Verzeichnisse auf die nur per SSL zugegriffen werden soll, wie folgt erreicht werden:


# SSL so fordern, dass ggf. Basic Auth nur einmal innerhalb von SSL abgefragt wird.
<syntaxhighlight lang=apache line>
#
# SSL so fordern, dass ggf. Basic Auth nur einmal innerhalb von SSL abgefragt wird.
#SSLOptions +StrictRequire  #Bei HS festgelegt.
#
SSLRequireSSL
#SSLOptions +StrictRequire  #Bei HS festgelegt.
ErrorDocument 403 https://xyz00.hostsharing.net/https/URL/mit/entspechendem/Ziel/Verzeichnis
SSLRequireSSL
ErrorDocument 403 https://xyz00.hostsharing.net/https/URL/mit/entspechendem/Ziel/Verzeichnis
</syntaxhighlight>


In diesem Beispiel wird auf eine xyz00 Domain umgeleitet für die das HS Zertifikat gilt. Liegen die Seiten nicht dort ist die entprechende URL des Speicherortes mit https:// anzugegeben.
In diesem Beispiel wird auf eine xyz00 Domain umgeleitet für die das HS Zertifikat gilt. Liegen die Seiten nicht dort ist die entprechende URL des Speicherortes mit https:// anzugegeben.
Zeile 85: Zeile 121:


Beispiel:
Beispiel:
Redirect permanent / https://www.example.org/
<syntaxhighlight lang=apache line>
Redirect permanent / https://www.example.org/
</syntaxhighlight>
 
Um alle http Requests nach https weiter zu leiten:
 
<syntaxhighlight lang=apache line>
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule .* https://%{HTTP_HOST}:443%{REQUEST_URI} [QSA,R=permanent,L]
</syntaxhighlight>
 
==Verzeichnislisting ausschalten==


Ruft ein Nutzer ein Verzeichnis auf, z.B. www.example.com/verzeichnis, so wird normalerweise die sich darin befindliche index.html als Standard aufgerufen. Gibt es diese Datei nicht, wird der Inhalt des Verzeichnisses gelistet. Das kann ein Sicherheitsproblem sein.


Die Einstellung
<syntaxhighlight lang=apache line>
IndexIgnore *
</syntaxhighlight>
sorgt dafür, dass alle Datein Unterhalb des Speicherortes der .htaccess Datei für das Verzeichnislisting ignoriert werden.


== Einstellen von MIME-Typen ==
Hinweis: Das Listen der Verzeichnisse kann auch schon auf Dateisystemebene durch ändern der Verzeichnisrechte (o-r) unterbunden werden, wodurch auch lokale User berücksichtigt werden.
 
== Ausnahme die eigene IP-Adresse ==
 
Zum Testen willst du möglicherweise auf ein anderes Backend zugreifen, als es die normalen Webseiten-Besucherinnen tun. Du kannst die eigene IP-Adresse als "RewriteCond" verwenden:


# Download von Zertifikaten ermöglichen:
<syntaxhighlight lang=apache line>
  AddType application/x-x509-ca-cert .crt
DirectoryIndex disabled
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REMOTE_ADDR} !=62.27.244.230
RewriteRule ^(.*) ajp://hsh02.hostsharing.net:8009/$1 [proxy,last]
   
RewriteRule ^(.*) ajp://127.0.0.1:34380/$1 [proxy,last]
</syntaxhighlight>


== Bestimmte Clients blockieren ==


Jeder Web-Browser gibt sich mit einer Kennung zu erkennen. Auch Bots sollten sich mit einer bestimmten Kennung zu erkennen geben. Diese Kennung wird ersichtlich, wenn Du die web.log Datei durchsuchst (siehe [[Traffic]]). Damit ist es möglich, bestimmte Clients oder Bots auszuschließen.


== Einstellen von Datei Handlern ==
Hier im Beispiel werden der SemrushBot, der MJ12bot, und der AI Bot Claude von Anthropic ausgeschlossen:


AddType application/x-httpd-phpcgi .php
<syntaxhighlight lang=apache line>
Action application/x-httpd-phpcgi /fastcgi-bin/php525stub
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^.*SemrushBot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*MJ12bot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*ClaudeBot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule ^.* - [F,L]
</syntaxhighlight>


Siehe auch https://stackoverflow.com/a/35775449/1632368


== Bestimmte Verzeichnisse nicht ausliefern ==


==Verzeichnislisting ausschalten==
zum Beispiel das .git Verzeichnis sollte nicht gezeigt werden:


Ruft ein Nutzer ein Verzeichnis auf, z.B. www.example.com/verzeichnis, so wird normalerweise die sich darin befindliche index.html als Standard aufgerufen. Gibt es diese Datei nicht, wird der Inhalt des Verzeichnisses gelistet.
<syntaxhighlight lang=apache line>
RedirectMatch 404 /\.git
</syntaxhighlight>


Das kann ein Sicherheitsproblem sein und ist mit der Einstellung
Oder wenn Wordpress für alle URLs mit HTTP Code 200 die Startseite anzeigt, denken manche Angreifer, es läuft ein mailman.
IndexIgnore *
für alle Datein Unterhalb des Speicherortes der .htaccess Datei abschaltbar.


<syntaxhighlight lang=apache line>
RedirectMatch 404 /mailman/
</syntaxhighlight>


== Gesperrte Optionen ==
== Gesperrte Optionen ==
Zeile 116: Zeile 197:
Einstellungen, die es ermöglichen würden, über den Webserver Rechte anderer
Einstellungen, die es ermöglichen würden, über den Webserver Rechte anderer
User zu erhalten, sind nicht erlaubt.
User zu erhalten, sind nicht erlaubt.
 
--
Da '''"Options FollowSymLink"''' hierunter fällt ist leider Options nicht erlaubt, und damit auch '''"Options -Indexes"''' und '''"Options +Indexes"'''. Es ist daher nicht möglich das Directory-Listing damit abzustellen und für bestimmte Unterordner wieder zu erlauben. Als Alternative können z.B. leere index.html Dateien angelegt werden, die statt des Directory-Listings angezeigt werden. Auch mit RewriteRules, die auf Directories prüfen, müsste es gehen. Dazu dürfte es im support@ Archiv auch schon Beispiel-Workarounds geben.
[[Kategorie:HSDoku]]
[[Kategorie:WWW]]
[[Kategorie:Glossar]]

Aktuelle Version vom 31. Juli 2024, 07:12 Uhr

Mit .htaccess Dateien innerhalb der Dokument-Verzeichnisse einer Domain (möglichst in ~/doms/example.com/.htaccess oder gezielt in Unterverzeichnissen subs/www ect. ), können Einstellungen des Apache Webservers konfiguriert werden.

Zum Beispiel kann angegeben werden, welches Apache-Modul für bestimmte Dateien (oder bestimmte Datei-Endungen) benutzt werden soll, wohin Dokumente verschoben worden sind, oder auch, wer Zugriff auf die Dateien hat.


Einstellen von MIME-Typen

# Download von Zertifikaten ermöglichen:
AddType application/x-x509-ca-cert .crt

Einstellen des im HTTP Header angegebenen Zeichensatzes

für .html Dateien:

AddCharset UTF-8 .html

# oder
AddDefaultCharset UTF-8

(für PHP Skripte siehe PHP )

Einstellen von Datei Handlern

AddType application/x-httpd-phpcgi .php 
Action application/x-httpd-phpcgi /fastcgi-bin/phpstub

Passwortschutz für Dateien

Achtung: Sofern der Zugriff http Zugriff auf die Dateien nicht automatisch auf https:// bzw. SSL umgeleitet wird, können die Passwörter unverschlüsselt übertragen werden!

Zunächst wollen wir den Zugriff auf ein Unterverzeichnis unserer Beispiel-Domain per .htaccess einschränken. Dazu legen wir zunächst eine Passwort-Datei an. Am einfachsten lässt sich diese spezielle Passwort-Datei in einer Shell anlegen. Wir legen sie in das etc-Verzeichnis der Domain:

xyz00-doms@hopi$ cd ~/doms/example.com/etc
xyz00-doms@hopi$ htpasswd -c .htpasswd peter
New password: *****
Re-type new password: *****
xyz00-doms@hopi$

Beim ersten User, hier peter wird das Programm htpasswd mit der Option -c (create) aufgerufen, aber auch wirklich nur beim ersten mal, da sonst die Datei .htpasswd neu erzeugt werden würde und vorherige Einträge damit gelöscht wären.

Sollte es beim Versuch, die Datei anzulegen, zu der Fehlermeldung kommando htpasswd nicht bekannt kommen, dann müssen wir zunächst den Befehl lokalisieren und mit dem richtigen Pfad neu aufrufen:

xyz00-doms@hopi$ locate htpasswd
/usr/sbin/htpasswd
xyz00-doms@hopi$ /usr/sbin/htpasswd -c .htpasswd peter

Beim zweiten User erfolgt der Aufruf dann ohne die Option -c:

xyz00-doms@hopi$ htpasswd .htpasswd petra
New password: *****
Re-type new password: *****
xyz00-doms@hopi$

Die Sternchen * stehen selbstverständlich für das jeweilige Passwort, welches dem User zugeordnet werden soll.

Diese Datei könnten wir auch einfach mit scp/pscp oder FTP hochladen, dabei stellt sich dann jedoch die Frage, wie wir sie erzeugen. Auf den meisten Windows-Systemen dürfte kein htpasswd-Kommando verfügbar sein. Für diese Fälle gibt es eine online-Version z.b.: https://de.functions-online.com/crypt.html die Ausgabe einfach mit Copy&Paste in eine Datei kopieren und diese hochladen.

Die so angelegte Passwort-Datei kann nun von einer oder mehreren .htaccess-Dateien verwendet werden. Dazu begeben wir uns in das zu schützende Verzeichnis und legen dort eine Datei .htaccess an. Dies kann wieder per Upload oder in einer Shell geschehen. Die Datei kann beispielsweise so aussehen:

order allow,deny
allow from all
require valid-user
Authname "Privater Bereich, bitte Anmelden."
Authtype Basic
AuthUserFile /home/doms/example.com/etc/.htpasswd

Dabei verweist die letzte Zeile auf die von uns angelegte .htpasswd Datei. Zu beachten ist:

  • Das die Pfadangabe absolut erfolgt, um einen "Internal Server Error" zu vermeiden.
  • Falls die Datei innerhalb des Dokumenten Verzeichnisses liegen muss, sie auf jeden Fall .htpasswd heißt, damit sie vom Webserver nicht herausgegeben wird.
  • Die .htaccess Datei in den Paketdomains innerhalb des web/ bzw. web-ssl/ Verzeichnisses liegen muss, damit kein "Internal Server Error" auftritt.

Passwortschutz von CGI- und PHP-Anwendungen

Mit dem beschriebenen Mechanismus können selbstverständlich auch PHP-Skripte und CGI-Anwendungen vor unberechtigten Zugriffen geschützt werden. In dem geschützten Skript kann über die Umgebungsvariable REDIRECT_REMOTE_USER der Benutzername des Benutzers abgefragt werden, der sich angemeldet hat.

In PHP-Skripten kann mit Hilfe der automatisch global sichtbaren Variablen $_ENV auf die Umgebungsvariablen zugegriffen werden. Um die Variable REDIRECT_REMOTE_USER zu lesen, schreibt man also $_ENV['REDIRECT_REMOTE_USER'].

Redirects

Redirect permanent / http://www.example.com/

Rewrite Rules

RewriteEngine On
RewriteRule ^mailman/(.*)$      /cgi-bin/mailman/$1

Nur SSL erlauben und automatisch umschalten

Bei per Symlink zusammengeschalteten Verzeichnissen, kann dies für die Verzeichnisse auf die nur per SSL zugegriffen werden soll, wie folgt erreicht werden:

# SSL so fordern, dass ggf. Basic Auth nur einmal innerhalb von SSL abgefragt wird.
#
#SSLOptions +StrictRequire  #Bei HS festgelegt.
SSLRequireSSL
ErrorDocument 403 https://xyz00.hostsharing.net/https/URL/mit/entspechendem/Ziel/Verzeichnis

In diesem Beispiel wird auf eine xyz00 Domain umgeleitet für die das HS Zertifikat gilt. Liegen die Seiten nicht dort ist die entprechende URL des Speicherortes mit https:// anzugegeben.

Bei separaten Verzeichnissen für ssl und nicht-ssl kann auch ein permanenter Redirekt gelegt werden.

Beispiel:

Redirect permanent / https://www.example.org/

Um alle http Requests nach https weiter zu leiten:

RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule .* https://%{HTTP_HOST}:443%{REQUEST_URI} [QSA,R=permanent,L]

Verzeichnislisting ausschalten

Ruft ein Nutzer ein Verzeichnis auf, z.B. www.example.com/verzeichnis, so wird normalerweise die sich darin befindliche index.html als Standard aufgerufen. Gibt es diese Datei nicht, wird der Inhalt des Verzeichnisses gelistet. Das kann ein Sicherheitsproblem sein.

Die Einstellung

IndexIgnore *

sorgt dafür, dass alle Datein Unterhalb des Speicherortes der .htaccess Datei für das Verzeichnislisting ignoriert werden.

Hinweis: Das Listen der Verzeichnisse kann auch schon auf Dateisystemebene durch ändern der Verzeichnisrechte (o-r) unterbunden werden, wodurch auch lokale User berücksichtigt werden.

Ausnahme die eigene IP-Adresse

Zum Testen willst du möglicherweise auf ein anderes Backend zugreifen, als es die normalen Webseiten-Besucherinnen tun. Du kannst die eigene IP-Adresse als "RewriteCond" verwenden:

DirectoryIndex disabled
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REMOTE_ADDR} !=62.27.244.230
RewriteRule ^(.*) ajp://hsh02.hostsharing.net:8009/$1 [proxy,last]
 
RewriteRule ^(.*) ajp://127.0.0.1:34380/$1 [proxy,last]

Bestimmte Clients blockieren

Jeder Web-Browser gibt sich mit einer Kennung zu erkennen. Auch Bots sollten sich mit einer bestimmten Kennung zu erkennen geben. Diese Kennung wird ersichtlich, wenn Du die web.log Datei durchsuchst (siehe Traffic). Damit ist es möglich, bestimmte Clients oder Bots auszuschließen.

Hier im Beispiel werden der SemrushBot, der MJ12bot, und der AI Bot Claude von Anthropic ausgeschlossen:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^.*SemrushBot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*MJ12bot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*ClaudeBot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule ^.* - [F,L]

Siehe auch https://stackoverflow.com/a/35775449/1632368

Bestimmte Verzeichnisse nicht ausliefern

zum Beispiel das .git Verzeichnis sollte nicht gezeigt werden:

RedirectMatch 404 /\.git

Oder wenn Wordpress für alle URLs mit HTTP Code 200 die Startseite anzeigt, denken manche Angreifer, es läuft ein mailman.

RedirectMatch 404 /mailman/

Gesperrte Optionen

Einstellungen, die es ermöglichen würden, über den Webserver Rechte anderer User zu erhalten, sind nicht erlaubt. --