Erstellen Sie Umleitungs- und Umschreiben von Regeln in .HTaccess auf Apache Webserver
- 906
- 236
- Matteo Möllinger
Bei Verwendung des Apache -Webservers, .htaccess
Dateien (auch "verteilte Konfigurationsdateien" bezeichnet) werden verwendet, um die Konfiguration pro Directory-Basis oder allgemeiner anzugeben, um das Verhalten des Apache-Webservers zu ändern, ohne auf virtuelle Hostdateien direkt zugreifen zu müssen (dies ist beispielsweise normalerweise unmöglich. auf gemeinsam genutzten Hosts). In diesem Tutorial sehen wir, wie wir URL -Umleitungen festlegen und Regeln im Inneren neu schreiben können .htaccess
Dateien.
In diesem Tutorial lernen Sie:
- Wie .HTaccess -Dateien funktionieren
- So richten Sie URL -Umschreibungsregeln in .HTaccess -Dateien verwenden die
Umkreisten
Richtlinie - So richten Sie die URL -Umleitungsregeln in .HTaccess -Dateien verwenden die
Umleiten
UndRecirectMatch
Richtlinien
Softwareanforderungen und Konventionen verwendet
Kategorie | Anforderungen, Konventionen oder Softwareversion verwendet |
---|---|
System | Verteilung unabhängig |
Software | Apache -Webserver |
Andere | Keine weiteren Anforderungen erforderlich |
Konventionen | # - Erfordert, dass gegebene Linux -Commands mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden können sudo BefehlUS |
Sollten Sie verwenden .HTaccess -Dateien?
Wie bereits erwähnt, die Verwendung von .htaccess
Dateien werden nicht empfohlen, wenn Sie direkt mit virtuellen Host -Konfigurationsdateien arbeiten können, da der Apache -Webserver verlangsamt wird (wenn der ALLGESTELLT
Die Richtlinie wird verwendet, um die Verwendung von zu ermöglichen .htaccess
Dateien, der Webserver scannt jedes Verzeichnis, das nach ihnen sucht). In einigen Situationen jedoch die Verwendung von .htaccess
Dateien sind die einzige Lösung.
Die Menge von Anweisungen, die in verwendet werden können .htaccess
Dateien werden in der Haupt -Site -Konfiguration über die festgelegt ALLGESTELLT
Richtlinie innerhalb a Strophe; Zum Beispiel würden wir so etwas schreiben wie:
ALLESRIDE ALLES
Die Anweisungen werden auf angewendet .htaccess
Dateien, die im angegebenen Verzeichnis und alle seine Unterverzeichnisse gefunden wurden.
Für die Richtlinien, die wir in diesem Tutorial verwenden, um zu arbeiten, die mod_alias Und mod_rewrite Apache -Module müssen aktiviert sein.
Umleitungen (mod_alias)
Wie bereits angegeben, in unserem .htaccess
Dateien möchten wir möglicherweise einige Umleitungregeln angeben, sodass der Client, wenn eine URL angefordert wird, zu einem anderen umgeleitet wird.
Wir haben im Grunde zwei Möglichkeiten, die Operation durchzuführen: Verwenden der Verwendung der Umleiten oder der RecirectMatch Richtlinien. Was ist der Unterschied zwischen den beiden? Ersteres lasst uns eine Umleitung errichten, die auf einfachen und einfachen URL -Übereinstimmungen basiert. Ersteres tut im Grunde dasselbe, ist aber mächtiger, da wir damit verwenden können Reguläre Ausdrücke.
Die Anweisung „Umleitung“
Lassen Sie uns einige Beispiele für die Verwendung des umleiten Richtlinie. Angenommen, wir möchten unsere gesamte Website umleiten:
Umleiten 301/https: // url/to/redirect/to
Das oben oben ist ein ziemlich „extremes“ Beispiel. Lassen Sie uns die Syntax analysieren. Als erstes haben wir die Richtlinie angegeben: Umleiten.
Das zweite, was wir zur Verfügung gestellt haben, ist der HTTP -Code, der für die Umleitung verwendet werden soll: Dies kann entweder als numerischer Status oder in Form einer Zeichenfolge bereitgestellt werden.
Ein paar Beispiele:
HTTP -Code | STICHWORT |
---|---|
301 | dauerhaft |
302 | Temperatur |
303 | Sehen Sie an |
410 | gegangen |
Im vorherigen Beispiel haben wir a konfiguriert dauerhaft Umleitung, seit wir die benutzten 301
HTTP -Code. Ein Äquivalent davon wäre:
Dauerhaft umleiten/https: // url/to/redirect/to
Die Art der Umleitung kann insgesamt weggelassen werden: Wenn es der Fall ist, die 302
Code (vorübergehende Umleitung) er wird standardmäßig verwendet.
Das dritte Argument, das wir in der Regel vorgelegt haben absolut Pfad der „originalen“ Ressource, die übereinstimmen sollte. In diesem Fall haben wir verwendet /
Welches ist die Wurzel der Website, da wir sie vollständig umleiten möchten. Hier das planen Und Gastgeber Teil der URL muss weggelassen werden.
Das vierte Argument ist die „neue“ URL, auf die der Benutzer umgeleitet werden sollte. In diesem Fall können wir wie im obigen Beispiel eine vollständige URL verwenden, einschließlich planen Und Gastgeber, Oder lassen Sie sie weg und verwenden. Dieses Argument ist obligatorisch, wenn der angegebene Umleitungsstatus zwischen sich liegt 301
Und 399
, aber es muss weggelassen werden Wenn der bereitgestellte Status nicht in diesem Bereich liegt. Das macht Sinn: Stellen Sie sich vor, wir verwenden a 410
Status zu signalisieren, dass die Ressource verschwunden ist: Es hätte keinen Sinn, eine Umleitungs -URL anzugeben. In diesem Fall würden wir einfach schreiben:
Umleitung 410/Pfad/von/Ressource
Die Anweisung "recirectMatch"
Mit der Richtlinie „Weiterleitung“ können wir den Weg der URL angeben, die umgeleitet werden soll, muss jedoch einfach und einfach übereinstimmen, wie sie angegeben ist. Was ist, wenn wir etwas Komplexeres ausführen möchten, wie zum Beispiel, um Anforderungen für alle Dateien mit dem umzuleiten? .html
Verlängerung? In diesen Fällen können wir die verwenden RecirectMatch Richtlinie und verwenden a regulären Ausdruck. Lassen Sie uns ein Beispiel sehen:
RecirectMatch 301 (.*) \.html $ 1.Php
Im obigen Beispiel haben wir alle Anfragen für umgeleitet .html
Dateien auf unserer Website zu Dateien mit demselben Namen und demselben Pfad, aber mit dem .Php
Verlängerung. Lassen Sie uns die Regel analysieren.
Wie immer ist das erste, was wir zur Verfügung gestellt haben, in diesem Fall die Richtlinie RecirectMatch. Danach haben wir wie zuvor den HTTP -Code zur Verfügung gestellt, um die Umleitung zu verwenden. Dann, und das ist das Interessante, wir haben die benutzt (.*) \.html $
regulären Ausdruck.
An diejenigen unter Ihnen, die bereits vertraut sind Regex Dies sollte sofort klar sein, aber lassen Sie uns sehen, wie es funktioniert: die .
(Punkt) im regulären Ausdruck übereinstimmt allen Zeichen *
die feststellen, dass der vorherige Ausdruck übereinstimmt werden sollte 0 oder mehrmals. Der Ausdruck ist in Klammern eingeschlossen und ist so gruppiert, und der Teil der URL, der entspricht, kann sie später über die bezeichnet werden $ 1
Variable (mehrere Gruppen können verwendet werden - sie werden progressiv 'benannt' $ 2
). Nach dem Teil des in der Klammern eingeschlossenen Ausdrucks gaben wir an, dass der Pfad in enden sollte .html
: Sie können sehen, dass wir dem entkommen sind .
mit einem Backslash dafür
buchstäblich übereinstimmen. Endlich haben wir benutzt $
zum Ende der Linie entsprechen.
Als Argument für die Umleitung -URL, die wir verwendet haben $ 1.Php
. Wie wir das bereits erklärten $ 1
wird verwendet, um den Teil der URL zu verweisen, der dem regulären Ausdruck zwischen Klammern entspricht (was der vollständige Pfad abzüglich der ist .html
Erweiterung), also verwenden wir hier im Grunde genommen den gleichen Weg, aber mit dem .Php
Verlängerung.
URL Rewriting (mod_rewrite)
URL -Umschreibungsregeln können beides sein transparent oder vom Benutzer sichtbar. Im ersten Fall fordert der Benutzer eine Seite an, und der Server übersetzt intern die Anfrage auf der Basis der bereitgestellten Regel, um der Ressource zu bedienen: Der Benutzer bemerkt nicht, was passiert, da die URL in seinem Browser nicht ' t ändern. Im zweiten Fall erreichen wir stattdessen praktisch eine vollständige Umleitung, die vom Benutzer sichtbar ist.
Beginnen wir mit dem ersten Fall. Wenn wir URL -Umschreiben verwenden möchten, müssen wir als erstes (in diesem Fall in unserem Fall .htaccess
Datei) soll die folgende Anweisung schreiben:
Umschreiber auf
Der RewriteEngine Die Anweisung ist, wie der Name schon sagt, erforderlich, um den Status der Apache Rewrite Engine zu ändern. Im obigen Beispiel haben wir es aktiviert; Um es zu deaktivieren, müssen wir stattdessen schreiben:
Umschreibe ab
Nehmen wir als Beispiel an, wir haben eine Ressource auf dem Namen Buchseite.html
In unserem Server, der früher von der einfachen und einfachen URL erreicht wurde: http: // localhost/Seite.html
. Stellen Sie sich nun vor neue Seite.html
, Aber aus offensichtlichen Gründen möchten wir, dass unsere Kunden immer noch in der Lage sind, die Ressource mit der alten URL zu erreichen (vielleicht haben sie sie in ihren Browser -Lesezeichen gespeichert). Was wir tun könnten, ist die folgenden zu schreiben, sehr
einfache Regel:
RewriteEngine on Rewriterule ^Seite \.HTML /NewPage.html
Die Syntax der Regel ist der für die verwendet, die wir verwendet haben RecirectMatch
Richtlinie: Zuerst haben wir die Richtlinie selbst, Umkreisten
, als wir das haben Muster Wird an die URL -Matching gewöhnt: Es muss a sein Regex. Danach haben wir das Auswechslung Zeichenfolge, mit der die ursprüngliche URL ersetzt wird.
Es gibt ein viertes Element, das in der Definition von a verwendet werden kann Umkreisten sind die Flaggen, die verwendet werden, um das Verhalten des Webservers zu ändern, wenn eine bestimmte Regel übereinstimmt.
Lassen Sie uns ein Beispiel sehen: Mit der oben genannten Regel, wie wir bereits sagten, geschieht keine Umleitung: Die URL in der Browseradressleiste ändert sich nicht. Wenn wir eine Umleitung wollen, müssen wir das hinzufügen R
Flagge zum Ausdruck:
RewriteEngine on Rewriterule ^Seite \.HTML /NewPage.HTML [R]
Flags werden zwischen Klammern bereitgestellt: In diesem speziellen Fall die R
Flagge führt dazu, dass die Regel als Umleitung interpretiert wird. Es ist sogar möglich, die Art der Umleitung anzugeben, die stattfinden sollte, indem der zugehörige HTTP -Code beispielsweise angegeben wird:
Neu wrich.HTML /NewPage.HTML [R = 301]
Ein weiteres gemeinsames Dinge, an das URL -Umschreibung verwendet wird, ist die „Verschönerung“ von URLs für SEO -Zwecke. Nehmen wir zum Beispiel ein PHP Ausweis als Abfrageparameter in bereitgestellt
Die URL zum Beispiel:
http: // localhost/Produkte.Php?id = 1
Um die Ressource am verfügbar zu machen http: // localhost/products/1
URL, wir könnten die folgende Regel schreiben:
RewriteEneNeN-on Recriterule ^products /([0-9]+) $ /Produkte.Php?id = $ 1
Mit dem [0-9]
regex wir passen alle Ziffern an und mit dem +
Wir sagen, dass der vorherige Ausdruck übereinstimmen muss 1 oder mehrmals Damit die Regel ausgeführt werden kann. Der übereinstimmende Ausdruck ist in Klammern eingeschlossen, sodass wir auf den angepassten Teil der URL in der Zeichenfolge „Ziel“ verweisen können, indem wir die verwenden $ 1
Variable. Auf diese Weise wird die ID des Produkts, die wir in der „verschönschten“ URL anbieten, zum Wert der Ausweis
Variable in der Abfragezeichenfolge.
Schreiben Sie die Bedingungen neu
Wir haben gerade gesehen, wie der reguläre Ausdruck mit der vom Benutzer bereitgestellten URL übereinstimmen muss. Im letzten Beispiel haben wir gesehen, wie die http: // localhost/products/1
URL kann intern neu geschrieben werden http: // localhost/Produkte.Php?id = 1
. Aber was ist, wenn der von der neue URL angegebene Pfad auf eine auf dem Server vorhandene „reale“ Datei verweist? Was wäre, wenn zum Beispiel, /Produkte/1
ist eine regelmäßige Datei, und wir möchten, dass sie so serviert wird, wie sie ist? In solchen Fällen können wir die verwenden Umschreiben
Richtlinie.
Mit dem Umschreiben
Richtlinie geben wir eine Bedingung an, die für das Umschreiben der URL respektiert werden sollte, um stattfinden zu können. In diesem Fall möchten wir beispielsweise möglicherweise feststellen, dass wenn die Produkte/1
Die Datei gibt es auf dem Server, der Umleitung
sollte nicht stattfinden. Wir würden schreiben:
RewriteEngine on Rewritecond %Request_FileName !-f Rewriterule ^products /([0-9]+) $ /Produkte.Php?id = $ 1
Wir benutzen das Umschreiben
Richtlinie vor der Umkreisten
. Das erste, was wir in die Richtlinie gingen, ist die Testzeichenfolge das sollte abgestimmt werden. In diesem Zusammenhang können wir eine Reihe vordefinierter Servervariablen verwenden, wie %Request_filename
:
Es verweist auf die Der vollständige lokale Dateisystempfad zur Datei oder zum Skript, das der Anforderung entspricht.
Hier können wir keine vollständige Liste aller verfügbaren Variablen angeben, die Sie unter der Apache mod_rewrite -Dokumentation finden können.
Nach der „Testzeichenfolge“ geben wir die Bedingung an, die übereinstimmt werden sollte: In diesem Fall haben wir verwendet !-F
Um anzugeben, dass die angewendete Datei oder das Skript, die mit der Anforderung übereinstimmt, für die Anforderung nicht regelmäßig ist, sollte keine reguläre Datei sein, die auf dem Server vorhanden ist (-F
entspricht einer regulären Datei und !
umdreht das Ergebnis).
Der oben ist ein wirklich einfaches Beispiel für a Umschreiben
Richtlinie: Mehr als einer kann vor dem bereitgestellt werden Umkreisten
Richtlinie: Alle von ihnen sollten damit übereinstimmen, dass letztere angewendet werden.
Schlussfolgerungen
In diesem Artikel haben wir gesehen, wie wir URL -Umleitungen angeben und Regeln umschreiben .htaccess
Dateien bei Verwendung des Apache -Webservers. Wir haben einige sehr einfache Beispiele für die Verwendung des Umleiten
, RecirectMatch
Und Umkreisten
Richtlinien und wie können wir sie verwenden, um bestimmte Verhaltensweisen zu erreichen. Dies war nur eine Einführung in diese Themen.
Verwandte Linux -Tutorials:
- OpenLiteSespeed Htaccess Setup
- Ermöglichen .HTaccess auf Apache 2 Linux Server
- So verwalten dynamische virtuelle Hosts mit Apache und der…
- So migrieren Sie Apache in Nginx, indem Sie virtuelleHosts in…
- Apache IP und name -basierte virtuelle Hosts erläutert
- Eine Einführung in Linux -Automatisierung, Tools und Techniken
- So verwenden Sie Apache, um den gesamten Datenverkehr von HTTP auf HTTPS umzuleiten
- So richten Sie VSFTPD auf Debian ein
- Mastering -Bash -Skriptschleifen beherrschen
- Linux Apache -Protokollanalysator
- « So installieren Sie das Registrierungsdatenextraktionstool für Registrierung auf Linux
- Bash Advanced Variable Idiome für die Fallsensitivitätsmanagement »