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] 

Bestimmten Ordner erlauben und bestimmte IP

SetEnvIf Request_URI ^/.well-known noauth=1
Order deny,allow
Deny from all
Require valid-user
Allow from xxx.xxx.xxx.xxx
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/
                RewriteCond %{ENV:REDIRECT_STATUS} ^$
            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]
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!


Top-Artikel in diesem Bereich

Linux Bash - Zum Fortsetzen eine beliebige Taste drücken

geändert: 25.03.2020 von Bernhard (Erstveröffentlichung: 22.08.2012)

Variante 1 beliebige Taste #!/bin/bash echo "Fortsetzten mit beliebiger Taste ... " stty -icanon -echo min 1 time 0 dd bs=1 count=1 >/dev/null 2>&1 stty stty -g echo Variante 2, weiter mit Enter read -p "weiter mit Enter"  (danke an borwinius und Jörg) ... weiterlesen

Bash Funktion und Logging für ein rsync-Backup-Script

erstellt: 06.08.2021 von Bernhard

Um mehrere Ordner über rsync zu synchronisieren, können die einzelnen Ordner für den Sync wie folgt in eine Bash-Datei geschrieben werden, soweit so einfach: ... weiterlesen

Datum mit Linux Bash

geändert: 05.06.2016 von Bernhard (Erstveröffentlichung: 22.08.2012)

#!/bin/bash date=$(date --utc --date "$1" +%F) echo $date   ... weiterlesen


Fragen / Kommentare


Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Außerdem geben wir Informationen zu Ihrer Nutzung unserer Website an unsere Partner für soziale Medien, Werbung und Analysen weiter. Details anzeigen.