Mit dieser Frage können wir Benutzern anbieten, die nach Informationen suchen, wie eine oder mehrere allgemeine oder grundlegende Weiterleitungen in Apache mithilfe der htaccess-Datei vorgenommen werden können. Alle zukünftigen Fragen zum Auffinden von Informationen, die von der Frage abgedeckt werden, sollten als Duplikation dieser Frage geschlossen werden. Gemäß dieser Meta-Frage .
Worum geht es in dieser Frage? Die Idee ist zwar nicht perfekt Über htaccess auf der Apache-Plattform können Sie die am häufigsten gestellten Fragen zu Weiterleitungen auf einem Lampentyp oder einem Live-Server beantworten. Die Art der Antworten sollte im Allgemeinen die sein, die Sie sich vorstellen können und die weltweit von 100.000 Websites verwendet werden und die hier bei Pro Webmasters immer wieder in verschiedenen Formen abgefragt werden.
Einige Beispiele für die Art der Antworten, nach denen wir suchen:
Einige Beispiele für die Arten von Antworten, nach denen wir nicht suchen:
Ressourcen für erweiterte bis komplexe Mod_Rewrite-Regeln:
Bitte beachten Sie : Diese Frage befindet sich noch im Aufbau und wird möglicherweise benötigt Einige Verfeinerungen entweder von mir selbst oder einem echten Moderator von Pro Webmasters, falls Sie irgendwelche Bedenken oder Fragen haben benutzen Sie bitte die Metaseite, die ich vor ein paar Tagen hier gemacht habe .
Es gibt 2 Module, die Sie im htaccess zur Steuerung von Weiterleitungen verwenden können. Diese sind als mod_alias und mod_rewrite bekannt. Um den Unterschied zwischen den beiden unten aufgeführten Befehlen zu erkennen, müssen Sie sich mit einigen Befehlen vertraut machen, wenn Sie mod_alias oder mod_rewrite verwenden.
mod_alias Befehle
mod_rewrite Befehle
mod_alias wird als einfachere Weiterleitungsmethode angesehen, während mod_rewrite als weiter fortgeschritten gilt und mehr Direktiven zulässt. Beachten Sie, dass mod_rewrite-Befehle vor mod_alias ausgeführt werden.
Es gibt viele Möglichkeiten, eine Seite mit htaccess auf eine andere umzuleiten. 301 ist im Allgemeinen die wichtigste und am häufigsten verwendete Methode, da Seiten permanente Weiterleitungen und keine temporären Weiterleitungen erfordern. Permanente Weiterleitungen eignen sich hervorragend, um Platzierungen auf einer Seite auf einer anderen zu halten.
301 bleibende Karten
Weiterleitung 301: Redirect 301 /old.html http://www.example.com/new-url/
RedirectPermanent: RedirectPerm /old.html http://www.example.com/new-url/
RedirectMatch: RedirectMatch 301 ^old.html$ http://www.example.com/new-url/
RewriteRule:
RewriteEngine On
RewriteBase /
RewriteRule ^old.html$ http://www.example.com/new-url/ [R=301,NC,L]
302 Temporäres
Weiterleitung 302: Redirect 302 /old.html http://www.example.com/new-url/
RedirectTemp: RedirectTemp /old.html http://www.example.com/new-url/
RedirectMatch: RedirectMatch 302 ^old.html$ http://www.example.com/new-url/
RewriteRule:
RewriteEngine On
RewriteBase /
RewriteRule ^old.html$ http://www.example.com/new-url/ [R,NC,L]
Sie sollten mod_write verwenden, um alle Anfragen für Nicht-WWW-Versionen Ihrer Site umzuleiten, da die Variable $ 1 Seitennamen abfängt, sodass example.com/page1/
automatisch zu www.example.com/page1/
umleitet.
mod_rewrite:
RewriteEngine On
RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_Host}/$1 [R=301,L]
mod_alias:
<If "%{HTTP_Host} != 'www.example.com'">
Redirect permanent / http://www.example.com/
</If>
mod_rewrite:
RewriteEngine On
RewriteCond %{HTTP_Host} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com$1 [R=301,L]
mod_alias:
<If "%{HTTP_Host} != 'example.com'">
Redirect permanent / http://example.com/
</If>
RewriteEngine On
RewriteCond %{HTTP_Host} ^www.example.com$ [NC]
RewriteRule ^(.*)$ https://example.com$1 [R=301,L]
Dieses Skript entfernt TLS auf allen anderen Seiten außer der Anmeldeseite und der Registrierungsseite. Sie können einfach |
als Trennzeichen zwischen den Dateinamen hinzufügen.
mod_rewrite:
RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/(login|register)\.php [NC]
RewriteRule ^(.*)$ http://%{HTTP_Host}/$1 [R=301,L]
Wenn Sie TLS für die gesamte Site erzwingen möchten, können Sie mit mod_rewrite erkennen, dass HTTPS deaktiviert ist.
mod_rewrite:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}
Einige Web-Hosts benötigen möglicherweise Options -MultiViews
in Ihrem htaccess, um diese Erweiterungen zu entfernen. Testen Sie sie ohne und fügen Sie sie einfach hinzu, wenn sie nicht funktionieren.
Erweiterungstyp PHP entfernen:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
Erweiterungstyp HTML entfernen:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
Erweiterungstyp HTM entfernen:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.htm [NC,L]
Funktioniert nicht? Versuchen Sie dies (ändern Sie PHP in die Dateierweiterung, die Sie entfernen möchten):
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
Durchsetzung:
Dadurch werden alle Anforderungen ohne nachfolgenden /
an die URL mit dem Schrägstrich am Ende umgeleitet. (Beachten Sie, dass im zweiten Teil der Klammer die zu ignorierenden Dateierweiterungen stehen. Da es keinen Sinn macht, /
für eine Bild-URL zu erzwingen.
RewriteCond %{REQUEST_URI} !\.(php|html?|jpg|gif)$
RewriteRule ^(.*)([^/])$ http://%{HTTP_Host}/$1$2/ [L,R=301]
Entfernen:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} (.*)$
RewriteRule ^(.+)/$ http://www.example.com/$1 [R=301,L
Dadurch werden alle in einer URL gefundenen Backslashes in Forward-Slashes umgewandelt. Gut, um doppelten Inhalt zu verhindern:
RewriteEngine On
RewriteCond %{REQUEST_URI} (.*)\\(.*)
RewriteRule .* %1/%2 [R=301]
RewriteEngine On
# Redirect Entire Site to New Domain
RewriteCond %{HTTP_Host} ^example.com$ [OR]
RewriteCond %{HTTP_Host} ^sub-domain.example.com$ [NC]
RewriteRule ^(.*)$ http://new-example.com/$1 [R=301,L]
RewriteEngine On
# Rename folder to match the sub folder you wish to remove
RewriteCond %{HTTP_Host} ^(www\.)?example-old\.com$ [NC]
RewriteRule ^folder(/.*)?$ http://www.example-new.com$1 [L,R=301]