This page has been robot translated, sorry for typos if any. Original content here.

Konfigurationsdatei für Apache-Server .htaccess

Nach Thema:


Файл-конфигуратор Apache-серверов .htaccess


.htaccess (mit einem Punkt am Anfang des Namens) ist eine Apache-Server-Konfigurationsdatei, mit der Sie den Server in separaten Verzeichnissen (Ordnern) konfigurieren können, ohne auf die Hauptkonfigurationsdatei zugreifen zu müssen. Legen Sie beispielsweise Berechtigungen für Dateien in einem Verzeichnis fest, ändern Sie die Namen von Indexdateien, behandeln Sie Apache-Fehler unabhängig voneinander und leiten Sie Besucher auf spezielle Fehlerseiten um. .htaccess ist ein einfaches Textdokument, dessen Erweiterung htaccess lautet. Diese Datei befindet sich normalerweise im Stammverzeichnis der Site, Sie können jedoch zusätzliche .htaccess-Dateien für verschiedene Verzeichnisse Ihrer Site erstellen.

Mod_rewrite ist ein Modul, das von Webservern zum Konvertieren von URLs verwendet wird.

Mod_rewrite-Modul-Direktiven

  • RewriteBase
  • RewriteCond
  • RewriteEngine
  • RewriteLock
  • RewriteLog
  • RewriteLogLevel
  • RewriteMap
  • RewriteOptions
  • RewriteRule

Varianten von Redirect-Implementierung mit der .htaccess-Datei

  1. Einfache Weiterleitung:
      Weiterleitung 301 / http://www.domainname.ru/
    
    oder
      redirect / secret http://www.site.ru/nosecret
    
    Es befindet sich in der .htaccess- Datei oder httpd.conf für Apache. Das erste "/" bedeutet, dass alles von der obersten Ebene der Seite, einschließlich aller Unterverzeichnisse, umgeleitet wird (vergessen Sie nicht, das letzte "/" zu setzen). Wenn Sie nur die Seite umleiten und den PR der alten Seite speichern möchten, können Sie Folgendes tun:

    Redirect 301 /old/old.htm http://www.you.ru/new.htm wo:
    /old/old.htm - Pfad und Name der alten Seite
    http://www.you.com/new.htm - Neuer Pfad und neuer Name der verschobenen Seite

  2. Leitet zu jeder Seite auf der IP des Benutzers um oder wenn eine bestimmte Seite angefordert wird (und auch durch die Namensmaske).
    Wenn der Benutzer die IP-Adresse 192.152.37.125 hat, wird er auf die Seite user.php umgeleitet:
      SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR = "redir"
     RewriteCond% {REDIR} redir
     RewriteRule ^ / $ /benutzer.php
    
  3. Redirect beim Anfordern bestimmter Dateien. Wenn Sie Dateien anfordern, deren Erweiterung nicht in der .htaccess-Datei (gif und jpg) angegeben ist, sollten Sie Folgendes umleiten:
      RewriteEngine Ein
     RewriteRule !. (Gif | jpg) $ index.php
    

  4. Verwenden von mod_rewrite:
      Optionen + FolgenSymLinks 
     RewriteEngine an 
     RewriteCond% {HTTP_HOST} ^ IhreDomain \ .ru 
     RewriteRule ^ (. *) $ Http://www.ihredomain.ru/$1 [R = permanent, L]
    

  5. Umleitung mit einem regulären Ausdruck:
      RedirectMatch 301 (. *) Http: //www.yourdomain.ru$1 Es ist in der .htaccess-Datei vorgeschrieben. 
    
    (. *) RedirectMatch stimmt tatsächlich mit den regulären Ausdrucksmustern nach dem Domänennamen überein. Daher können Sie das Muster nicht mit ^ / yourdomain.com vergleichen. Sie können Seiten jedoch mit der Erweiterung .html in Dateien mit demselben Namen, jedoch mit der Erweiterung .php konvertieren:
      RedirectMatch 301 (. *) \. Html $ http: //www.IhreDomain.ru$1.php
    
    Wenn Sie für einzelne Seiten eine andere Umleitung durchführen müssen, können Sie Folgendes verwenden:
      RedirectMatch Permanent ^ / html / resources.html $ http://www.newdomain.com/resources.php 
     RedirectMatch Permanent ^ / html / andere_seite.html $ http://www.newdomain.com/other_page.php 
     RedirectMatch Permanent ^ / (. *) $ Http://www.newdomain.com/ 
    
    " RedirectMatch Permanent " ist das Äquivalent von "RedirectMatch 301", die Zeichenfolge mit "* (Wildcard)" sollte die letzte in dieser Liste sein.

  6. Lesbare URLs erstellen
    So konvertieren Sie beispielsweise www.site.ru/product.php?id=123 auf www.site.ru/product/123 wie folgt:
      RewriteEngine an
     RewriteRule ^ Produkt /([^/\.]+)/?$ Produkt.php? Id = $ 1 [L]
    
    Im folgenden Beispiel konvertieren Sie www.site.ru/script.php?product=123 in www.site.ru/cat/product/123/:
      RewriteRule cat /(.*)/(.*)/$ /script.php?$1=$2
    

  7. Weiterleitung nach PHP:
      header ("HTTP / 1.1 301 dauerhaft verschoben"); 
     header ("Ort: http://www.newdomain.ru/newdir/newpage.htm"); 
     exit (); 
    
    Natürlich müssen wir eine Seite erstellen, wenn wir darauf verweisen und Redirect auftreten, und sie auf dem Server veröffentlichen. Und es ist besser, HTTP / 1.1 anzugeben (und nicht HTTP / 1.0 oder HTTP / 0.9, die kein virtuelles Hosting unterstützen)

  8. Leitet alle Dateien in einem Ordner auf eine Datei um.
    Zum Beispiel benötigen Sie den Super Disc Site-Bereich nicht mehr und möchten alle Anfragen an den Ordner / superdiscount in eine Datei /hot-offers.php umleiten. Fügen Sie dazu den folgenden Code zu .htaccess hinzu.
      RewriteRule ^ superdiscount (. *) $ /Hot-offers.php [L, R = 301]
    

  9. Leitet alle Ordner außer einer Datei um
    Im folgenden Beispiel werden alle Dateien aus dem Ordner / superdiscount in die Datei /hot-offers.php umgeleitet, mit AUSNAHME der Datei /superdiscount/my-ebook.html, die an /hot-to-make-million.html umgeleitet werden sollte
      RewriteRule ^ superdiscount / mein-buch.html /hot-to-make-million.html [L, R = 301]
     RewriteRule ^ superdiscount (. *) $ /Hot-offers.php [L, R = 301]
    

  10. Leiten Sie die dynamische URL zu einer neuen Datei um.
    Diese Option ist nützlich, wenn Sie eine dynamische URL mit Parametern in eine neue statische Datei umleiten möchten.
      RewriteRule ^ artikel.jsp? Id = (. *) $ /Latestnews.htm [L, R = 301]
    
    Das ist jetzt, eine Anfrage an eine Datei der Form http://www.kass.ws/article.jsp?id=8632 und / oder http://www.kass.ws/article.jsp?id=1245 wird an die http-Datei gesendet : //www.kass.ws/latestnews.htm.

  11. Massenumleitung neuer Dateien
    Nun kommen wir zum schwierigsten Moment, wenn Sie viele URLs umleiten müssen, zum Beispiel nach dem Ändern Ihres CMS. Eine Anzahl von Problemen tritt sofort auf. Erstens wird die Eingabe aller geänderten Adressen in eine .htaccess-Datei sehr lange dauern und an sich eine unangenehme Beschäftigung darstellen. Zweitens verlangsamen zu viele Einträge in der .htaccess-Datei den Apache-Server. Und drittens, wenn Sie diese Menge an Informationen eingeben, ist es wahrscheinlich, dass Sie sich irgendwo irren werden. Der beste Ausweg besteht darin, einen Programmierer einzustellen, der Ihnen eine dynamische Weiterleitung schreibt.
    Das folgende Beispiel ist in PHP geschrieben, kann aber auch in anderen Sprachen ausgeführt werden. Angenommen, Sie haben auf Ihrer Site zu einem neuen Link-System gewechselt, und alle Dateien, die mit der alten ID enden, sollten sich auf diese verteilen. Zuerst erstellen wir eine Tabelle in der Datenbank, die die alte ID und die neue URL für die Weiterleitung enthält. old_id INT new_url VARCHAR (255) Als nächstes schreiben Sie den Code, der Ihre alte ID mit den neuen URLs verbindet
    Fügen Sie danach die folgende Zeile in .htaccess hinzu:
      RewriteRule ^ / Produkt - (. *) _ ([0-9] +). Php /redirectold.php? Productid =$2
    
    Erstellen Sie dann eine PHP-Datei redirectold.php, die 301 Weiterleitungen unterstützt:
      <? php
     Funktion getRedirectUrl ($ productid) {
     // Verbinde dich mit der Datenbank
     $ dServer = "localhost";
     $ dDb = "MeinDateiname";
     $ dUser = "meindb_user";
     $ dPass = "Passwort";
    
     $ s = @mysql_connect ($ dServer, $ dUser, $ dPass)
     oder sterben ("Verbindung zum Datenbankserver konnte nicht hergestellt werden");
    
     @mysql_select_db ($ dDb, $ s)
     oder sterben ("Konnte keine Verbindung zur Datenbank herstellen");
    
     $ query = "SELECT new_url FROM leitet WHERE old_id =" um.  $ Produkt-ID;
     mysql_query ($ query);
     $ result = mysql_query ($ query);
     $ hasRecords = mysql_num_rows ($ result) == 0?  falsch: wahr;
     if (! $ hasRecords) {
     $ ret = 'http://www.yoursite.com/';
     } sonst {
     while ($ row = mysql_fetch_array ($ ergebnis))
     {
     $ ret = 'http://www.yoursite.com/'.  $ row ["new_url"];
     }
     }
     mysql_close ($ s);
     return $ ret;
     }
    
     $ productid = $ _GET ["productid"];
     $ url = getRedirectUrl ($ productid);
    
     header ("HTTP / 1.1 301 dauerhaft verschoben");
     Kopfzeile ("Ort: $ url");
     exit ();
     ?>
    

    Jetzt werden alle Aufrufe Ihrer alten URLs redirectold.php genannt, das die neue URL findet und 301 Antworten mit Ihrem neuen Link zurückgibt.

    Redirects basierend auf Zeit

    Wenn Sie Tricks des content-basierten Inhaltstyps verwenden müssen, verwenden die Webmaster immer noch CGI-Skripts, die Weiterleitungen zu speziellen Seiten generieren. Wie kann dies über mod_rewrite gemacht werden?

    Es gibt viele Variablen namens TIME_xxx für Umleitungsbedingungen. In Verbindung mit speziellen lexikographischen Proben zum Vergleich STRING und = STRING, können wir zeitabhängige Redirects erzeugen:
     
      RewriteEngine auf RewriteCond% {TIME_HOUR}% {TIME_MIN}> 0700 RewriteCond% {TIME_HOUR}% {TIME_MIN} <1900 RewriteRule ^ foo \ .html $ foo.day.html RewriteRule ^ foo \ .html $ foo.night.html 

    Dies ergibt den Inhalt von foo.day.html, wenn die URL foo.html von 07:00 bis 19:00 Uhr angefordert wird und in der verbleibenden Zeit der Inhalt von foo.night.html.


  12. Wir entfernen alle Anfragen am Anfang "WWW."
     RewriteEngine auf # kündigen an, dass wir mod_rewrite verwenden wollen
     RewriteCond% {HTTP_HOST} ^ www \. (. *) [NC]
     RewriteRule ^ /? (. *) Http: //% 1 / $ 1 [L, R = dauerhaft]
    

  13. Ändern Sie die Erweiterung .html in .php
    Manchmal kommt es vor, dass Sie eine statische Website haben und Sie ein PHP-Skript benötigen. Um dies zu tun, müssen Sie dem Server mitteilen, dass er diese Seite als PHP-Datei verarbeiten soll.
     AddHandler-Anwendung / x-httpd-php .html
    
    Diese Technik kann für andere Dateierweiterungen verwendet werden:
     AddHandler-Anwendung / x-httpd-php .xml
     AddHandler-Anwendung / x-httpd-php .asp
    

Zugriff auf ein bestimmtes Verzeichnis verweigern

  1. für alle zu allen Dateien im Verzeichnis:
      leugne von allem
    
  2. zu einer bestimmten Datei:
     leugne von allem
    
  3. nach Benutzer-IP:
      Auftrag verweigern, erlauben
     leugne von allem
     erlauben von 192.152.37.125
    
    Zugriff auf dieses Verzeichnis wird nur dem Benutzer mit der IP-Adresse 192.152.37.125 gewährt.

    Und wenn Sie einzelnen IP-Benutzern den Zugriff auf Ihre Site verweigern möchten, schreiben wir folgende Zeilen:

     Reihenfolge erlauben, verweigern
     von allen zulassen
     leugnen von 192.152.37.125
     leugnen von 123.456.177
    
  4. Richtlinienoptionen - Indizes - verbieten die Anzeige des Verzeichnisinhalts bei fehlender Indexdatei Manchmal müssen Sie sicherstellen, dass die Liste der Dateien im Verzeichnis nicht angezeigt wird, wenn sich in dem standardmäßig angezeigten Verzeichnis keine Datei befindet. Dann können Sie diese Zeile zu .htaccess hinzufügen:
      Optionen -Indexe
    
    In diesem Fall erhält der Besucher anstelle der Liste der Dateien im Verzeichnis den HTTP-Fehler 403 - Zugriff verboten.
  5. Zugriff auf Dateien mit mehreren Erweiterungstypen verweigern
     leugne von allem
    
    Es ist verboten, auf Dateien mit der Endung * .inc, * .conf und * .cfg zuzugreifen. Die Direktive funktioniert standardmäßig nicht mit regulären Ausdrücken, aber Sie können sie aktivieren, indem Sie das Tilde (~) in die Optionen der Anweisung einfügen. Die Syntax lautet wie folgt: [Tilde] [Leerzeichen] [hereafter_all_uneless_block] Um diesen Zugriff zu blockieren, schreiben wir folgendes:
      RewriteRule ^ .htaccess $ - [F]
    
    Diese Regel lautet wie folgt:
    Wenn jemand versucht, auf die .htaccess-Datei zuzugreifen, sollte das System den Fehlercode "HTTP response of 403" oder "403 Forbidden - Sie haben keine Zugriffsrechte auf /.htaccess auf diesem Server" ausgeben.

    Das Konstrukt .htaccess $ in diesem regulären Ausdruck bedeutet:
    ^ - Anfangslinie Anker
    $ ist der Ende der Zeile Anker
    . - in regulären Ausdrücken der Punkt '.' Es kennzeichnet ein Metasymbol und muss durch einen Backslash geschützt werden, wenn Sie den tatsächlichen Punkt noch verwenden möchten.

    Der Dateiname muss genau zwischen den Start- und Endankern liegen. Dadurch wird sichergestellt, dass nur dieser bestimmte Dateiname und kein anderer einen Fehlercode generiert.
    [F] ist eine spezielle "abweisende" Flagge.
    [NC] - nicht Groß-und Kleinschreibung.
    [OR] - bedeutet "oder die nächste Bedingung".

Definition der Codierung

Bestimmen Sie die Codierung, in der der Server Dateien zurückgibt

  AddDefaultCharset Windows-1251
Optionen: KOI8-R , UTF-8 , Windows-1251

Ermitteln der Codierung für hochgeladene Dateien

  CharsetSourceEnc windows-1251

Festlegen eines Kennworts für ein Verzeichnis mithilfe von .htaccess

Um ein Kennwort für das Verzeichnis festzulegen, können Sie das grundlegende Autorisierungssystem verwenden, das auf dem Apache-Webserver bereitgestellt wird. Erstellen Sie eine .htaccess-Datei mit den folgenden Anweisungen in dem Verzeichnis, in dem der Zugriff durch ein Passwort eingeschränkt werden soll:
  AuthType Grundlegend
 AuthName "Irgendein Name"
 AuthUserFile /www/some_login/www/htdocs/some_dir/.htpasswd
 erfordert einen gültigen Benutzer
Der Pfad /www/some_login/www/htdocs/some_dir/.htpasswd bezeichnet den vollständigen Pfad zur Passwortdatei auf der Festplatte unseres Servers. Wenn Sie zum Beispiel die .htpasswd-Datei (es gibt Passwörter) in das Home-Verzeichnis, in dem Sie gehen, indem Sie zum Server über FTP gehen, wird der Pfad zu dieser Datei sein /www/some_login/www/htdocs/some_dir/.htpasswd , wo some_login dein Login ist. In der AuthUserFile-Direktive geben wir den absoluten Pfad zur Datei mit Logins / Passwörtern an, die wir etwas später erstellen werden. Wenn Sie eine .htaccess-Datei auf Ihrem Computer erstellen und nicht sofort mit einem Texteditor auf dem Server, achten Sie besonders darauf, dass .htaccess ausschließlich im Textmodus (ASCII) per FTP übertragen werden muss.

Erstellen Sie eine Passwortdatei. Die Passwortdatei muss eine Zeichenfolge in der Form login: password enthalten. Das Passwort muss mit dem MD5-Algorithmus verschlüsselt werden. Eine Möglichkeit, eine solche Datei zu erstellen, besteht darin, das in der Apache-Lieferung enthaltene Programm htpasswd zu verwenden (auf unserem Server befindet es sich im Verzeichnis / usr / local / apache / bin, der vollständige Pfad lautet / usr / local / apache / bin / htpasswd).

Überlegen Sie, wie Sie eine Passwortdatei in der Unix-Shell direkt auf dem Server erstellen. Wir gehen in die Shell und führen die folgenden Befehle aus:

  htpasswd -mbc .htpasswd Benutzer1 7B1safkir
- Erstellen Sie eine neue .htpasswd-Datei, in die wir einen Eintrag für Benutzer1 mit dem in der Befehlszeile angegebenen Kennwort einfügen.
  htpasswd .htpasswd Benutzer2
- Fügen Sie der vorhandenen .htpasswd-Datei Benutzer2 hinzu und geben Sie das Kennwort manuell als Antwort auf die entsprechende Programmanforderung ein.

Nach dem Ende der Einrichtung müssen alle Logins auf den Server hochgeladen werden. Weitere Möglichkeiten zum Festlegen von Kennwörtern pro Seite

Definieren Sie Ihre eigenen Fehlerseiten

Sie können Ihre eigene Fehlerseite wie folgt einstellen:
  ErrorDocument 404 http://www.site.ru/404.php
IE ignoriert Seiten, die kleiner als 512 Byte sind.

Indexieren von Verzeichnissen und Unterverzeichnissen

Um die Indexierung von Suchmaschinenverzeichnissen und Unterverzeichnissen zu vermeiden, müssen Sie diese Zeile schreiben, zum Beispiel:
  Verzeichnisindex index.php
Diese Direktive gibt die Datei an, die beim Zugriff auf das Verzeichnis ohne Angabe eines Dateinamens aufgerufen werden soll.

Sie können mehrere Indexseiten angeben. Wenn ein Verzeichnis angefordert wird, werden sie in der Reihenfolge durchsucht, die in der DirectoryIndex-Direktive aufgeführt ist. Wenn die index.html-Datei nicht gefunden wird, wird die index.php-Datei durchsucht usw.

  Verzeichnisindex index.html index.php index.shtml

Persönlich bevorzuge ich die Umleitung von leeren Verzeichnissen entweder auf die Hauptseite der Site oder auf eine andere geeignete Seite. Zum Beispiel kann das Verzeichnis www.site.ru/pic/ zu www.site.ru umgeleitet werden.

Schützen Sie Bilder vor dem Herunterladen

Sehr oft passiert es, dass Webmaster Inhalte von Ihrer Website zusammen mit Zeichnungen kopieren und Zeichnungen von Ihrem eigenen Server heruntergeladen werden. Dies erzeugt unnötigen Verkehr, was oft zu einer Anzahl von Problemen führt. Wie können Sie sich vor solchen Webmastern schützen und Suchmaschinen nicht daran hindern, Bilder zu indizieren? Es ist einfach:
  RewriteEngine an
 RewriteCond% {HTTP_REFERER}.
 RewriteCond% {HTTP_REFERER}! ^ Http: // ([^.] + \.)? Site \.  [NC]
 RewriteCond% {HTTP_REFERER}! Google \.  [NC]
 RewriteCond% {HTTP_REFERER}! Suche \? Q = Cache [NC]
 RewriteCond% {HTTP_REFERER}! Msn \.  [NC]
 RewriteCond% {HTTP_REFERER}! Yahoo \.  [NC]
 RewriteCond% {REQUEST_URI}! ^ / Hotlinker \ .gif $
 RewriteRule \. (Gif | jpg | png) $ /hotlinker.gif [NC, L]
hotlinker.gif - das Bild, das angezeigt wird, anstelle der echten Bilder. Ich empfehle in diesem Bild, Ihr Logo und Link zu Ihrer Website anzuzeigen.

Eine weitere Variante des Zugriffsverbots auf Bilder von nicht autorisierten Seiten:

  SetEnvIfNoCase Referer "^ $" local_ref = 1
 SetEnvIfNoCase Referer "^ http: // (www \.)? HTMLWeb \ .ru" local_ref = 1
 SetEnvIfNoCase Referer "^ http: // (www \.)? Bilder \ .yandex \ .ru" local_ref = 1
 SetEnvIfNoCase Referer "^ http: // (www \.)? Hghltd \ .yandex \ .com" local_ref = 1
 Bestellung zulassen, verweigern
  Erlaube von env = local_ref

Suchmaschinen und alle Arten von Scannern erzeugen kollossalen Traffic auf Ihrer Website. Der folgende Codeblock verhindert den Zugriff auf die Site.

  RewriteCond% {HTTP_USER_AGENT} (Googlebot | Slurp | Spinne | Twiceler | heritrix |
	 Kombinieren | appie | boitho | e-SocietyRoboter | Exabot | Nutch | OmniExplorer |
	 MJ12bot | ZyBorg / 1 | Fragen \ Jeeves | AskJeeves | ActiveTouristBot |
	 JemmaTheTourist |  agadine3 | BecomeBot | Clustered-Suche-Bot |
	 MSIEcrawler | freefind | galaxy | genieknows | INGRID | grub-client |
	 MojeekBot | NaverBot | NetNose-Kriecher | OnetSzukaj | PrassoSunner |
	 Asterias \ Crawler | THUNDERSTONE | GeorgeTheTouristBot |
	 Voilabot | Vagabondo | fantomBro wser | StealthBrowser | UmhangBrowser |
	 fantomCrew \ Browser | Girafabot | Indy \ Bibliothek | Intelliseek | Zealbot |
	 Windows \ 95 | ^ Mozilla / 4 \ .05 \ \ [de \] $ | ^ Mozilla / 4 \ .0 $) [NC]
 RewriteRule ^ (. *) $ - [F]
 #
 RewriteCond% {HTTP_USER_AGENT} ^ Mozilla. * [NC, ODER]
 RewriteCond% {HTTP_USER_AGENT} ^ Opera. * [NC, ODER]
 RewriteCond% {HTTP_USER_AGENT} ^ Firefox. * [NC, ODER]
 RewriteCond% {HTTP_USER_AGENT} ^ Netscape. * [NC]
 RewriteRule ^ (. *) $ - [L]
 RewriteRule ^ (. *) $ - [F]

Verfolgen von Aufrufen Ihrer robots.txt-Datei

Um mehr Informationen über den Besuch von Suchmaschinen zu erhalten, ist es nützlich, detaillierte Informationen über den Zugriff auf die robots.txt-Datei zu haben.Um dies zu formalisieren, sollten in '.htaccess' folgende Einträge vorhanden sein:
  RewriteEngine an
  Optionen + FolgenSymlinks
  RewriteBase /
  RewriteRule ^ robots.txt $ /robot.php?%{REQUEST_URI}
Wenn wir jetzt die 'robots.txt'-Datei anfordern, leitet unsere RewriteRule den Besucher (Roboter) zum robot.php-Skript um. Außerdem wird die Variable an das Skript übergeben, das entsprechend Ihren Anforderungen verarbeitet wird. 'REQUEST_URI' gibt den Namen der angeforderten Datei an. In diesem Beispiel ist dies "robots.txt". Das Skript liest den Inhalt von 'robots.txt' und sendet es an den Webbrowser oder Suchmaschinenroboter. So können wir Treffer von Besuchern und Logfiles zählen.

PHPSESSID

Um das Hinzufügen von PHPSESSID zur URL zu deaktivieren, fügen Sie den Index index.php ein:

  ini_set ("session.use_trans_sid", 0);

Entweder in .htaccess, schreibe:

  php_flag session.use_trans_sid Aus

Wenn Sie das alles schwierig finden, verwenden Sie das bereit Dienst der Umwandlung dynamischer URLs in statische URLs mit Hilfe von htaccess

Cache-Anweisungen

Caching für alle Dateitypen nach Zugriffszeit
  ExpiresActive auf
 ExpiresDefault "Zugriff plus 600 Sekunden"
Caching für alle Dateitypen nach Zeitpunkt der Änderung
  ExpiresActive auf
 ExpiresDefault "Modifikation plus 600 Sekunden"
Caching für bestimmte Dateitypen
  ExpiresByType text / css "Modifikation plus 600 Sekunden"
 ExpiresByType image / jpeg "Modifikation plus 600 Sekunden"
 ExpiresByType image / gif "Modifikation plus 600 Sekunden"
 ExpiresByType image / x-ico "Modifikation plus 600 Sekunden"
 ExpiresByType image / png "Modifikation plus 600 Sekunden"

Cachen mit dem Apache-Server nicht zulassen

Öffnen Sie die Apache-Serverkonfigurationsdatei httpd.conf und entfernen Sie die Kommentarzeichen für die folgenden Zeilen:

 LoadModule expires_module modules / mod_expires.so
 LoadModule headers_module modules / mod_headers.so 
 ...
 AddModule mod_expires.c
 AddModule mod_headers.c

Schreibe in .htaccess folgendes:

  # Deaktivieren Sie das Zwischenspeichern in diesem Ordner
 # Sie müssen Module aktivieren
 # mod_headers.c und mod_expires.c
 #
 # Header Cache-Kontrolle
 Header anhängen Cache-Control "no-store, no-cache, muss revidieren"
 # Läuft die Überschrift ab
 ExpiresActive an
 ExpiresDefault "jetzt"

Die notwendigen Header werden automatisch übertragen, und Sie müssen sie nicht extra in PHP schreiben - der Cache ist schon aus!

Beschreibung des http-Headers des Cache-Control-Caching

Caching mit der .htaccess-Datei

  # Cache-Auflösung in diesem Ordner
 # Sie müssen Module aktivieren
 # mod_headers.c und mod_expires.c
 #
 # Header Cache-Kontrolle
 Header anhängen Cache-Control "public"
 # Läuft die Überschrift ab
 ExpiresActive an
  ExpiresDefault "Zugriff plus 1 Stunde"
  #ExpiresDefault "Zugriff plus 10 Jahre"

Caching von Javascript-Dateien mit der .htaccess-Datei

 ExpiresDefault "Zugriff plus 3 Tage"

Vorsicht beim Caching, weil Beim Ändern einer Datei kann der Benutzer erst nach 3 Tagen eine neue Version erhalten!

Wie bekomme ich HTML-Seiten, um PHP-Code zu behandeln?

Schreibe die folgenden Zeilen in deine .htaccess-Datei:
  RemoveHandler .php .htm .html
 AddHandler-Anwendung / x-httpd-php .php .htm .html

Wie platziere ich mehrere Websites auf einem virtuellen Hosting?

Um zwei oder mehr Sites auf einem virtuellen Hosting zu platzieren, müssen Sie trotz der Anzahl der Ihnen zugewiesenen Domänen die folgenden Zeilen in der Datei ".htaccess" hinzufügen:

  RewriteEngine Ein
 RewriteRule ^ neues Verzeichnis / - [L]
 RewriteCond% {HTTP_HOST} (www.)? Newdomain.ru [NC]
 RewriteRule (. *) Neues Verzeichnis / $ 1 [L]

Wo:
newdirectory / - Der Ordner, in dem sich die zweite Site befindet
newdomain.ru - die Domäne, für die wir umleiten

Bitte beachten Sie, dass Sie ein einziges E-Mail-Konto haben werden. Ie. Wenn, Sie haben eine Box admin@domain.ru, dann nach dem Verbinden der Domain newdomain.ru an der Box admin@domain.ru erscheint ein zweiter Name - admin@newdomain.ru. Wenn Sie ein neues Postfach erstellen (z. B. Info), werden ihm automatisch zwei Namen zugewiesen: info@domain.ru und info@newdomain.ru.

Suchen Sie nach Seiten in mehreren Verzeichnissen

Manchmal ist es notwendig, dass der Webserver nach Seiten in mehr als einem Verzeichnis sucht.

  RewriteEngine an

 # Versuchen Sie zuerst, es am angegebenen Ort zu finden / ...
 # ... und wenn Sie finden, dass wir die Suche beenden:
 RewriteCond / Ihr / docroot / dir1 /% {REQUEST_FILENAME} -f
 RewriteRule ^ (. +) / Ihr / docroot / dir1 / $ 1 [L]

 # Zweitens - versuchen Sie es in der Kneipe zu finden / ...
 # ... und wenn Sie finden, dass wir die Suche beenden:
 RewriteCond / dein / docroot / dir2 /% {REQUEST_FILENAME} -f
 RewriteRule ^ (. +) / Ihr / docroot / dir2 / $ 1 [L]

 # ansonsten für andere Anweisungen fortfahren
 RewriteRule ^ (. +) - [PT]

Virtuelle Benutzerhosts

Wenn Sie unter www.subdomain.domain.com Adressen für Benutzerseiten bereitstellen möchten, können Sie die folgenden Regeln verwenden, um http://www.domain.domain.ru/path in den internen Pfad / home / subdomain / path zu konvertieren:

  RewriteEngine an
 RewriteCond% {HTTP_HOST} ^ www \. [^.] + \. Ru $
 RewriteRule ^ (. +)% {HTTP_HOST} $ 1 [C]
 RewriteRule ^ www \. ([^.] +) \. Ru (. *) / Startseite / $ 1 $ 2

Dateien werden beschädigt, wenn sie auf den Server hochgeladen werden

Wenn die Binärdaten während der Übertragung von Dateien über Formulare (mit dem angegebenen enctype = "multipart / form-data") beschädigt sind, schreiben Sie die Anweisung in /cgi-bin/.htaccess:
  CharsetRecodeMultipartForms Aus.

Fehler beim Laden der SWF-Dateien.
Fehler beim Zugriff auf Seiten mit Keywords,
Geben Sie $ _REQUEST ein

Dies kann aufgrund des installierten Moduls passieren in Apache. Standardmäßig blockiert es in den Requests Zeilen mit SQL-Argumenten und anderen potenziell gefährlichen Befehlen.

Mögliche Fehlermeldungen:

Verboten

Sie sind nicht berechtigt, auf diesem Server auf /adm/index.php zuzugreifen. Darüber hinaus wurde ein Fehler 404 Not Found gefunden, während Sie versuchten, ein ErrorDocument zu verwenden, um die Anforderung zu verarbeiten.
oder
Die Anfrage ist unsicher und wurde abgelehnt.
Zu .htaccess hinzufügen
 SecFilterEngine Aus
 SecFilterScanPost Aus
Für die Nachricht:
"POST /wp-admin/async-upload.php HTTP / 1.1" 406 354 "-" "Shockwave Flash"
Sie können nur den Download von Dateien auf den Server aufheben:
 SecFilterEngine Aus
 SecFilterScanPost Aus

Optimal, um den Schutz nur aus dem Ordner zu entfernen, in dem dies erforderlich ist, ohne den Schutz von der gesamten Site zu entfernen.

Servervariablen

Dies sind Variablen der Form % {NAME_OF_VARIABLE}

Dabei kann NAME_OF_VARIABLE eine Zeichenfolge aus der folgenden Liste sein:

HTTP-Header: Verbindung & Anfrage:
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
interne Server: System: speziell:
DOKUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WTAG
ZEIT
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ

Diese Variablen entsprechen vollständig den gleichnamigen MIME-HTTP-Headern und den Apache-Server-Variablen oder den Struktur-tm- Feldern von Unix-Systemen. Jene, die für mod_rewrite besonders sind, schließen ein:

IS_SUBREQ - Enthält den Text "true", wenn die Abfrage derzeit als Unterabfrage ausgeführt wird, andernfalls "false". Unterabfragen können von Modulen generiert werden, die mit zusätzlichen Dateien oder einem URI arbeiten müssen, um ihre eigenen Aufgaben auszuführen.

API_VERSION - Dies ist die Apache-API-Version (die interne Schnittstelle zwischen dem Server und dem Modul) in der aktuellen Server-Assembly, wie in include / ap_mmn.h definiert. Die API-Version des Moduls entspricht der Version von Apache (für Apache Version 1.3.14 beispielsweise ist es 19990320: 10), was aber vor allem für die Autoren der Module interessant ist.

THE_REQUEST - Die gesamte HTTP-Anforderungszeichenfolge, die vom Browser an den Server gesendet wird (z. B. " GET /index.html HTTP / 1.1 "). Es enthält keine zusätzlichen Header, die vom Browser gesendet werden.

REQUEST_URI - Die angeforderte Ressource in der HTTP-Anforderungszeichenfolge.

REQUEST_FILENAME - Vollständiger Pfad im Dateisystem des Servers zu einer Datei oder einem Skript, das dieser Abfrage entspricht.

Anmerkungen:

  1. Die Variablen SCRIPT_FILENAME und REQUEST_FILENAME enthalten dieselben Werte, dh den Wert des Dateinamensfelds der internen request_rec- Struktur des Apache-Servers. Der erste Name ist einfach der allgemein bekannte Name der CGI-Variablen, während der zweite eine permanente Kopie von REQUEST_URI ist (enthält den Wert des uri- Feldes der request_rec- Struktur).
  2. Es gibt ein spezielles Format: % {ENV: variable}, wobei die Variable eine beliebige Umgebungsvariable sein kann. Dies wird in den internen Strukturen von Apache und (falls dies nicht der Fall ist) durch Aufrufen von getenv () vom Apache-Serverprozess gesucht .
  3. Es gibt ein spezielles Format: % {HTTP: header}, wobei der Header ein beliebiger HTTP MIME-Header-Name sein kann. Dies wird in der HTTP-Anfrage nachgeschlagen. Beispiel: % {HTTP: Proxy-Verbindung} HTTP-Header-Wert " Proxy-Verbindung: ".
  4. Es gibt ein spezielles Format für % {LA-U: Variable} der führenden Abfragen, die von einer internen (URL-basierten) Unterabfrage erzeugt werden, um den endgültigen Wert der Variablen zu bestimmen. Verwenden Sie dies, wenn Sie eine Variable für Transformationen verwenden möchten, die später in einer beliebigen Phase der API definiert wird und daher zu diesem Zeitpunkt nicht verfügbar ist. Wenn Sie beispielsweise die Variable REMOTE_USER aus dem Kontext des Servers ( httpd.conf- Datei) konvertieren möchten, sollten Sie % {LA-U: REMOTE_USER} verwenden, da diese Variable in den Autorisierungsphasen nach der URL-Übersetzungsphase, in der mod_rewrite arbeitet, festgelegt ist. Auf der anderen Seite, wegen der Implementierung von mod_rewrite im Kontext des Verzeichnisses (.htaccess Datei) über die Fixup-Phase der API und weil die Berechtigungsphasen vor dieser Phase gehen, können Sie einfach % {REMOTE_USER} verwenden .
  5. Es gibt ein spezielles Format: % {LA-F: variable} , das eine interne (dateibasierte) Unterabfrage erstellt, um den endgültigen Wert der Variablen zu bestimmen. Dies entspricht im Wesentlichen dem oben angegebenen LA-U-Format.

Homepage ohne Duplizierung

Normalerweise befindet sich der Hauptseitencode in der Datei index.html oder index.php, aber die Seite sollte auf einer der folgenden Anfragen geöffnet sein: yoursite.ru, yoursite.ru/index.html, www.yoursite.ru und www.yoursite.ru/index. .html. Aber für Suchmaschinen gibt es vier verschiedene URLs! Wenn Sie .htaccess nicht korrekt konfigurieren, fügt die Suchmaschine Ihrem Index vier identische Seiten hinzu. Dies ist ein Zeichen für eine minderwertige Website. Sie können dieses Problem mit Hilfe eines solchen Codes in .htaccess vermeiden:

  Optionen + FolgenSymLinks
 RewriteEngine an
 RewriteCond% {HTTP_HOST} ^ yoursite.ru
 RewriteRule (. *) Http://www.yoursite.ru/$1 [R = 301, L]
 RewriteCond% {THE_REQUEST} ^ [AZ] {3,9} \ / index \ .html \ HTTP /
 RewriteRule ^ index \ .html $ http://www.yoursite.ru/ [R = 301, L]

Alle doppelten Seiten werden zusammen mit einem Weiterleitungscode 301 mit der Hauptseite http://www.yoursite.ru/ zusammengeklebt.

Duplizieren Sie Seiten ohne Schrägstrich am Ende der URL

Um die Situation mit der Indexierung der Seiten www.yoursite.ru/about und www.yoursite.ru/about/ als unterschiedlich zu vermeiden, geben Sie folgenden Code ein:

Von Seiten ohne Schrägstrich wird eine Umleitung auf "Schrägstrich" gesetzt.

  RewriteCond% {REQUEST_FILENAME}! -F
 RewriteCond% {REQUEST_URI}! (. *) / $
 RewriteRule ^ (. *) $ / $ 1 / [R = 301, L]

Speichern von Dateien statt Öffnen

Viele haben gesehen, wie beim Herunterladen eines Archivs mit der Erweiterung .rar der Browser es als einfachen Text aus einem Hash der Zeichen öffnet. Dies bedeutet, dass die Server-Site nicht konfiguriert ist, um Dateitypen, die nicht im Browser geöffnet werden sollen, zwangsweise zu speichern.

  AddType application / octet-stream .rar .doc .mov .avi .pdf .xls .mp4