Ich hoffe, dies ist eine einfache JA- oder NEIN-Antwort (bitte geben Sie an, warum)
Frage 1: Ist es wichtig, in welcher Reihenfolge die Regeln in htaccess gestellt werden? Da es sich um vollständig getrennte Elemente handelt: zum Beispiel
F2: Wenn ja, wende ich die richtige Bestellung an? um den htacces motor zu beschleunigen und ihn nicht mit unnötigen regeln zu überlasten?
F3: Tipps zum Deaktivieren / Hinzufügen sind hier herzlich willkommen +1!
# DirectoryIndex index.php /index.php
AddDefaultCharset UTF-8
RewriteEngine on
# Options All
# Options +FollowSymLinks
# Options +FollowSymLinks -Indexes -ExecCGI
# RewriteBase /
#####################################################
<IfModule mod_headers.c>
ExpiresActive On
ExpiresDefault M172800
Header unset ETag
FileETag None
Header unset Pragma
##### STATIC FILES
<FilesMatch "\\.(ico|jpg|png|gif|svg|swf|css|js|fon|ttf|eot|xml|pdf|flv)$">
ExpiresDefault M1209600
Header set Cache-Control "public, max-age=1209600"
</FilesMatch>
##### DYNAMIC PAGES
<FilesMatch "\\.(php)$">
ExpiresDefault M604800
Header set Cache-Control "public, max-age=604800"
</FilesMatch>
</IfModule>
#####################################################
# /page123 and /page123/ will all go to /page123.php
RewriteRule ^(.+)/$ /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
####################################################
# NO WWW http://www. becomes always http://
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
##############################################################
# add own extensions that will be interpreted as php
AddType application/x-httpd-php .php
AddType image/svg+xml svg svgz
AddType text/css css
AddType text/javascript js
AddEncoding gzip svgz
##############################################################
ErrorDocument 500 /
ErrorDocument 404 /
.htaccess
Datei. Kurz gesagt, Anweisungen aus verschiedenen Modulen (und in verschiedenen Containern ) werden unabhängig und in einer vordefinierten Reihenfolge ausgeführt, unabhängig von ihrer offensichtlichen Reihenfolge in der Konfigurationsdatei.Ich kann nicht darüber sprechen, wie sich beispielsweise die Reihenfolge von
<files>
vs<Rewrite>
auf die Leistung auswirkt. Ich versuche das selbst herauszufinden. Ich konnte keine Informationen dazu finden, also spielt es möglicherweise keine Rolle?Ich möchte jedoch darauf hinweisen, dass die Ausführungsreihenfolge zwischen
Rewrite
vsRedirect
(undRedirectMatch
) möglicherweise nicht in der angegebenen Reihenfolge liegt, obwohl dies häufig erwartet wird.Insbesondere werden die Module
mod_rewrite
und undmod_alias
unabhängig voneinander und in verarbeitet diese Reihenfolge.Rewrite
) werden ausgeführt (in der Reihenfolge, in der sie aufgelistet sind).Redirect
undRedirectMatch
) in der Reihenfolge ausgeführt, in der sie in der Datei aufgeführt sind.Selbst wenn a
Redirect
fortfährtRewrite
, wird die Umleitung erst verarbeitet, nachdem alle Umschreibungen verarbeitet wurden.Eine Möglichkeit, die Datei "lesbar" zu halten, wenn Sie sowohl umleiten als auch neu schreiben, besteht darin, das
mod_alias
Modul überhaupt nicht zu verwenden . Verwenden Sie stattdessen nurmod_rewrite
. Das Umschreiben mit dem [R] -Flag verwandelt es im Wesentlichen in ein Umschreiben.Die Antwort dieses Webmasters zeigt, wie.
Jetzt werden alle Anweisungen in der Reihenfolge ausgeführt, in der sie in der Datei erscheinen, sodass es keine bösen Überraschungen oder Verwirrung über die Ausführungsreihenfolge gibt. Alternativ Sie können körperlich alle die verlagern
Redirect
undRedirectMatch
Richtlinien zum „Boden“ der Datei, um sich daran zu erinnern , dass sie erst ausgeführt wird , nachdem dieRewrite
ohnehin s.Hier sind einige gute StackExchange-Antworten, die bis zu diesem Punkt aufgeklärt wurden:
Im Übrigen konnte ich beispielsweise keine Informationen zur Leistung zwischen Platzierung
files
vor oder nachrewrite
s finden. Der einzige leistungsbasierte Ratschlag, den ich gefunden habe, lautet: Wenn man Zugriff auf Serverkonfigurationsdateien hat, ist es am besten, so viel wie möglich von der .htaccess-Datei in die Konfigurationsdatei zu verschieben und die .htaccess-Dateien insgesamt zu deaktivieren (oder bestimmte Verzeichnisse anzugeben, in denen .htaccess-Dateien sollten gelesen werden).Die Logik dort ist, dass Regeln, die in der Konfigurationsdatei platziert sind, nur einmal gelesen werden müssen. Wenn die htaccess-Verarbeitung aktiviert ist, muss für jede Anforderung jedes Verzeichnis des Servers (bei oder höher als das angeforderte Verzeichnis) nach möglichen htaccess-Dateien durchsucht werden, unabhängig davon, ob sie vorhanden sind oder nicht. Und wenn doch, muss jeder neu gelesen werden.
quelle
Ich habe das gleiche Problem gemeldet, aber dies ist eine Serveradministrator-Site-Perspektive, die es ihnen ermöglicht, Apache nach einer Änderung der Apache-Server-Konfiguration neu zu starten.
Bisher ist die beste Antwort, die ich erhalten habe, zuerst die dateibezogenen Anweisungen aufzulisten.
Dies ist sinnvoll, da Apache Verzeichnisse und htaccess-Anweisungen in jedem Verzeichnis verwalten muss.
Listen Sie also zuerst dateibezogene Anweisungen und dann offensichtliche Blöcke auf, um den Apache-Zugriffsprozess in der Reihenfolge der offensichtlichen zu beenden.
Mögliche Lösung zur Optimierung der Anforderungen: - URL-bezogene Korrekturen anfordern - Verzeichnisbezogene Einschränkungen - Indexbezogene Einschränkungen - Dateibezogene Einschränkungen - Proxy-Einschränkungen <- Alle töten - Leerer Benutzeragent <- Alle töten ... Die Liste macht endlosen Spaß
Mein Anliegen bezog sich auf die Reihenfolge der Richtlinien. Soll ich beispielsweise Index-, Datei- und Header-Anweisungen vor RewriteConds festlegen?
quelle