Apache htaccess - Beispiele
Mit Hilfe der .htaccess-Datei kann der Zugriff auf einen Apache Webserver gesteuert werden. Dazu reicht es eine Textdatei mit den Namen .htaccess in einem veröffentlichten Ordner am Webserver anzulegen und mit entsprechenden Regeln zu befüllen.
ModRewrite
ModRewrite ermöglicht es verschieden URL-Pfade für den Aufruf zu verwenden, als Beispiel die Verwendung einer index.php-Datei ohne diese im Aufruf angeben zu müssen:
Aufruf im Browser: URL/page1
ModRewrite kann den Aufruf am Server auf z.B.: index.php?page=page1 umwandeln. Die index.php bekommt dann normale GET-Parameter (hier page) übergeben.
ModRewrite kann wie folgt in der Datei .htaccess aktiviert werden:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
...
Ob ModRewrite aktiv wird, lässt sich über Conditions steuern:
Conditions
Leerer Query-String, also kein ?.. an der URL:
RewriteCond %{REQUEST_URI} ^/?$
Testen ob ein Cookie vorhanden ist:
RewriteCond %{HTTP_COOKIE} !COOKIENAME=COOKIEVALUE; [NC]
Testen ob eine Datei vorhanden ist
RewriteCond %{DOCUMENT_ROOT}/index.htm -f
Rule
RewriteRule .? page-cache/pc__index__pc.html [L]
Beispiele
Index.php entfernen
RewriteRule ^(.*)$ index.php?/$1 [L]
index.php entfernen und Ausnahmen, sowie search Variable. Beispiel für cms.libe.net:
DirectorySlash Off
RewriteCond %{REQUEST_URI} !^/login.php$ [NC]
RewriteCond %{REQUEST_URI} !^/rss.php$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.txt$ [NC]
RewriteCond %{REQUEST_URI} !^/favicon.ico$ [NC]
RewriteCond %{REQUEST_URI} !^/plugins/.*$ [NC]
RewriteCond %{REQUEST_URI} !^/image/.*$ [NC]
RewriteCond %{REQUEST_URI} !^/admin/.*$ [NC]
RewriteCond %{REQUEST_URI} !^/template/.*$ [NC]
RewriteCond %{REQUEST_URI} !search/ [NC]
RewriteCond %{REQUEST_URI} !^/download/.*$ [NC]
RewriteCond %{REQUEST_URI} !^/dev/tmpdata/.*$ [NC]
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteRule ^search(.*)$ index.php/search/$2 [L]
Umleitung von http auf https:
Header set Strict-Transport-Security "max-age=10886400"
#rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]<span style="font-size: .9rem;"> </span>
Bestimmten Ordner erlauben und bestimmte IP
SetEnvIf Request_URI ^/.well-known noauth=1
Order deny,allow
Deny from all
Require valid-user
Allow from ???.???.???.???
Allow from env=noauth
Satisfy Any
Bestimmtes File erlauben
Deny from all
<Files ~ "\.php$">
Order allow,deny
Deny from all
</Files>
<Files allowguest.php>
Order Allow,Deny
Allow from all
</Files>
# directory browsing
Options All -Indexes
.htpasswd-Datei erzeugen
Eine.htpasswd-Datei für eine Basic-Authentifizierung kann unter Linux mit folgendem Befehl erstellt werden:
htpasswd -c .htpasswd testusr
ModRewrite und bestimmten Ordner erlauben (Laravel)
SetEnvIf Request_URI ^/.well-known noauth
SetEnvIf Request_URI ^/(api|index\.php) noauth2
AuthType Basic
AuthName "Zugriff verweigert "
AuthUserFile .htpasswd
Order deny,allow
Deny from all
Require valid-user
Allow from env=noauth
Allow from env=noauth2
Satisfy Any
Direkten Zugriff auf einen Ordner verbieten
RewriteCond %{REQUEST_URI} ^/page-cache/<br /> RewriteCond %{ENV:REDIRECT_STATUS} ^$<br /> RewriteRule ^page-cache/ - [F]
einen Ordner mit einem Passwort schützen
AuthType Basic
AuthName "bitte das Passwort eingeben"
AuthUserFile ../../.htpasswd
Require valid-user
nicht www Domänen auf www. umleiten
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
Falls in der URL eine index.php vorkommt, auf die URL ohne index.php umleiten
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
{{percentage}} % positiv