Heim >Backend-Entwicklung >PHP-Tutorial >Erläutern Sie das relevante Wissen über RewriteCond und 13 mod_rewrite-Anwendungsbeispiele für Apache Pseudostatic
1. Fügen Sie das www-Tag zum Subdomainnamen hinzu
RewriteCond %{HTTP_HOST} ^([a-z.]+)?example.com$ [NC]
RewriteCond %{HTTP_HOST} !^www. [NC ]
RewriteRule .? http://www.xample.com%{REQUEST_URI} [R=301,L]
Diese Regel erfasst die Variable %1 des Domänennamens der zweiten Ebene Beginnen Sie nicht mit www, fügen Sie dann www hinzu, gefolgt vom vorherigen Domainnamen und {REQUEST_URI}.
2. Entfernen Sie das www-Tag im Domainnamen
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule .? http://example.com%{REQUEST_URI} [R =301 ,L] 3. Entfernen Sie das www-Tag, aber speichern Sie die Subdomain
RewriteCond %{HTTP_HOST} ^www.(([a-z0-9_]+.)?example.com)$ [ NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]
Wenn hier die Variable 1 % übereinstimmt, befindet sich der Subdomänenname in %2 (internes Atom). ) Erfasst, und es ist diese %1-Variable, die wir brauchen. 4. Verhindern Sie das Hotlinken von Bildern
Einige Webmaster tun alles, um Ihre Bilder per Hotlink auf ihre Websites zu verlinken, was Ihre Bandbreite beansprucht. Sie können Code hinzufügen, um dieses Verhalten zu verhindern.
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/ [NC]
RewriteRule .(gif|jpg|png)$ - [F]
Wenn der {HTTP_REFERER}-Wert nicht leer ist oder nicht von Ihrem eigenen Domänennamen stammt, verwendet diese Regel [F]FLAG, um URLs zu blockieren, die mit gif|jpg|png enden.
Wenn dies der Fall ist Der Hotlink ist absolut verachtet und Sie können das Bild auch ändern, um Benutzern, die die Hotlink-Website besuchen, mitzuteilen, dass die Website Ihr Bild stiehlt.
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/.*$ [NC]
RewriteRule .(gif|jpg| png)$ Ihre Bildadresse [R=301,L]
Zusätzlich zur Verhinderung von Bild-Hotlinks ersetzen die oben genannten Regeln alle per Hotlink verknüpften Bilder durch die von Ihnen festgelegten Bilder.
Sie können auch verhindern, dass bestimmte Domainnamen Ihre Bilder per Hotlink verknüpfen:
RewriteCond %{HTTP_REFERER} !^http://(www.)?leech_site.com/ [NC]
RewriteRule .(gif|jpg |png)$ - [F,L]
Diese Regel blockiert alle Bildlinkanfragen auf der Domainnamen-Blacklist.
Natürlich basieren die oben genannten Regeln auf {HTTP_REFERER}, um den Domainnamen zu erhalten. Wenn Sie ihn als IP-Adresse verwenden möchten, verwenden Sie einfach {REMOTE_ADDR}.
5. Wenn die Datei nicht vorhanden ist, leiten Sie zur 404-Seite weiter
Wenn Ihr Host keinen 404-Seitenumleitungsdienst bereitstellt, erstellen wir ihn selbst.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? /404.php [L]
Hier entspricht -f dem vorhandenen Dateinamen, - d entspricht der vorhandene Pfadname. Dieser Code ermittelt, ob Ihr Dateiname und Pfadname vorhanden sind, bevor eine 404-Umleitung durchgeführt wird. Sie können der 404-Seite auch einen Parameter ?url=$1 hinzufügen:
RewriteRule ^/?(.*)$ /404.php?url=$1 [L]
Auf diese Weise kann Ihre 404-Seite sein Einige andere Dinge, wie z. B. Standardvertrauen, Senden einer E-Mail-Erinnerung, Hinzufügen einer Suche usw.
6. Verzeichnis umbenennen
Wenn Sie ein Verzeichnis auf Ihrer Website umbenennen möchten, versuchen Sie Folgendes:
RewriteRule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [R= 301 ,L]
In der Regel habe ich ein „.“ hinzugefügt (beachten Sie, dass es nicht alle Zeichen darstellt, da ein Escape-Zeichen davor steht), um der Dateierweiterung zu entsprechen. 7. Konvertieren Sie das .html-Suffix in .php
Sofern auf die .html-Datei weiterhin zugegriffen werden kann, aktualisieren Sie Ihren Website-Link.
RewriteRule ^/?([a-z/]+).html$ $1.php [L]
Dies ist keine Webweiterleitung und daher für Besucher nicht sichtbar. Machen Sie daraus eine permanente Weiterleitung (sichtbar) und ändern Sie FLAG in [R=301,L].
8. Erstellen Sie Links ohne Dateierweiterungen
Wenn Sie Links zu Ihrer PHP-Website prägnanter und leichter zu merken machen möchten – oder Dateierweiterungen ausblenden möchten, versuchen Sie Folgendes:
RewriteRule ^/?([ a-z] +)$ $1.php [L]
Wenn die Website eine Mischung aus PHP- und HTML-Dateien enthält, können Sie mit RewriteCond zunächst feststellen, ob die Datei mit dem Suffix existiert, und sie dann ersetzen:
RewriteCond %{ REQUEST_FILENAME}.php -f
RewriteRule ^/?([a-zA-Z0-9]+)$ $1.php [L]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^/ ?([a -zA-Z0-9]+)$ $1.html [L]
Wenn die Datei ein .php-Suffix hat, wird diese Regel ausgeführt.
9. Überprüfen Sie bestimmte Parameter in Abfragevariablen
Wenn die URL einen speziellen Parameter enthält, können Sie RewriteCond verwenden, um dessen Existenz zu identifizieren:
RewriteCond %{QUERY_STRING} !uniquekey=
RewriteRule ^/?script_that_requires_uniquekey.php$ other_script.php [QSA,L]
Die oben genannten Regeln prüfen, ob der Uniquekey-Parameter in {QUERY_STRING} vorhanden ist. Wenn der Wert von {REQUEST_URI} script_that_requires_uniquekey ist, wird er an die neue URL weitergeleitet.
10. Abfragevariablen löschen
Das mod_rewrite-Modul von Apache erkennt Abfragevariablen automatisch, es sei denn, Sie nehmen die folgenden Änderungen vor:
a Weisen Sie einen neuen Abfrageparameter zu (Sie können [QSA,L] FLAG speichern). (ursprüngliche Abfragevariable)
b). Fügen Sie nach dem Dateinamen ein „?“ hinzu (z. B. index.php?). Das Symbol „?“ wird nicht in der Adressleiste des Browsers angezeigt. 11. Zeigt den aktuellen URI im neuen Format
an, wenn dies die URLs sind, die wir derzeit ausführen: /index.php?id=nnnn. Wir würden dies sehr gerne in /nnnn ändern und dafür sorgen, dass Suchmaschinen das neue Format anzeigen. Um die Suchmaschine auf die neue zu aktualisieren, müssen wir zunächst die alten URLs auf das neue Format umleiten, aber auch sicherstellen, dass die vorherige index.php weiterhin ausgeführt werden kann. Bist du von mir verwirrt?
Um die obige Funktion zu erreichen, besteht der Trick darin, in der Abfragevariablen einen für Besucher unsichtbaren Marker „Marker“ hinzuzufügen. Wir leiten nur Links um, die nicht über das „Marker“-Tag in der Abfragevariablen verfügen, ersetzen dann den ursprünglichen Link durch das neue Format und fügen über [QSA] FLAG ein „Marker“-Tag zu den vorhandenen Parametern hinzu. Das Folgende ist die Implementierungsmethode:
RewriteCond %{QUERY_STRING} !marker
RewriteCond %{QUERY_STRING} id=([-a-zA-Z0-9_+]+)
RewriteRule ^/?index. php $ %1? [R=301,L]
RewriteRule ^/?([-a-zA-Z0-9_+]+)$ index.php?marker &id=$1 [L]
Hier, Original Die URL: http://www.example.com/index.php?id=nnnn enthält keine Markierung, daher wird sie durch die erste und die zweite Regel dauerhaft zu http://www.example.com/nnnn umgeleitet Eins. Die Regel leitet http://www.example.com/nnnn zu http://www.example.com/index.php?marker&id=nnnn um und fügt zwei Variablen hinzu, marker und id=nnnn, und schließlich startet mod_rewrite . Führen Sie den Bearbeitungsvorgang durch.
Beim zweiten Treffer wird die erste Regel ignoriert. Es gibt hier ein „.“-Zeichen, das in http://www.example.com/index.php?marker &id=nnnn erscheint Die zweite Regel wird ebenfalls ignoriert, also sind wir fertig.
Beachten Sie, dass diese Lösung einige Erweiterungen von Apache erfordert, sodass Sie auf viele Hindernisse stoßen, wenn Ihre Website auf einem gemeinsam genutzten Host platziert wird. 12. Stellen Sie sicher, dass der Sicherheitsdienst aktiviert ist
Apache kann zwei Methoden verwenden, um zu ermitteln, ob Sie den Sicherheitsdienst aktiviert haben, indem es auf die Variablen {HTTPS} bzw. {SERVER_PORT} verweist:
RewriteCond %{ REQUEST_URI} ^secure_page.php$
RewriteCond %{HTTPS} !on
RewriteRule ^/?(secure_page.php)$ https://www.example.com/$1 [R=301 ,L]
Die oben genannten Regeln testen, ob der Wert {REQUEST_URI} unserem sicheren Seitencode entspricht und {HTTPS} nicht gleich on ist. Wenn diese beiden Bedingungen gleichzeitig erfüllt sind, wird die Anfrage an den sicheren Dienst-URI umgeleitet. Darüber hinaus können Sie den gleichen Test mit {SERVER_PORT} durchführen. 443 ist ein häufig verwendeter Sicherheitsdienst-Port
RewriteCond %. {REQUEST_URI} ^secure_page.php$
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(secure_page.php)$ https://www.example.com/$1 [R=301,L ]
13. Erzwingen Sie Sicherheitsdienste auf einer bestimmten Seite
Wenn Sie im selben Serverstammverzeichnis auf einen Sicherheitsdienst-Domänennamen und einen Nicht-Sicherheitsdienst-Domänennamen stoßen, müssen Sie RewriteCond verwenden, um festzustellen, ob der Sicherheitsdienst Port ist belegt und erfordert nur die Seiten in der folgenden Liste, um als Sicherheit zu dienen:
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(page1|page2|page3|page4|page5)$ https ://www .example.com/%1[R=301,L]
Im Folgenden erfahren Sie, wie Sie eine Seite, die nicht als sicherer Dienst festgelegt ist, an Port 80 zurückgeben:
RewriteCond %{ SERVER_PORT } ^ 443$
RewriteRule !^ /?(page6|page7|page8|page9)$http://www.example.com%{REQUEST_URI} [R=301,L]
Dieser Artikel erklärt RewriteCond und 13 Ein mod_rewrite-Anwendungsbeispiel und verwandte Kenntnisse über Apache Pseudo-Static. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Verstehen Sie den Unterschied zwischen Forward-Proxy und Reverse-Proxy
So verwenden Sie Apache, um einen virtuellen Host zu erstellen
So starten und überwachen Sie den Sh-Memcached-Prozess
Das obige ist der detaillierte Inhalt vonErläutern Sie das relevante Wissen über RewriteCond und 13 mod_rewrite-Anwendungsbeispiele für Apache Pseudostatic. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!