Konsolenbefehle für .htaccess und config.php
Für Administratoren, Hoster und alle, die Installationen per Skript aufsetzen. Jede Installation bringt in ihrem
Wurzelverzeichnis drei Vorlagen mit: .htaccess_root und .htaccess_root_static (die Regeln für Apache und
LiteSpeed, die zweite mit der Auslieferung des statischen Caches) und config.php-RECOMMENDED (die beschriebenen
Einstellungen der config.php). Sieben Konsolenbefehle bringen sie an ihren Platz und lesen und ändern config.php,
so dass niemand sie von Hand kopieren oder PHP auf einem Server im Editor bearbeiten muss:
Warnung
.htaccessbremst jede Anfrage. Sind.htaccess-Dateien erlaubt (AllowOverridealles außerNone), geschweige denn genutzt, sucht Apache sie bei jeder Anfrage in jedem Verzeichnis des Pfads und liest und wertet sie aus, und die Ladezeiten der Seiten steigen drastisch (gemessen). Die einzige wirkliche Abhilfe ist, die Funktion für den virtuellen Host abzuschalten:AllowOverride Noneim virtuellen HTTPS-Host, und die Regeln in der Konfiguration des virtuellen Hosts selbst als mod_rewrite-Regeln. Das ist in Geschwindigkeitstests im Produktivbetrieb weit schneller und die Zeit für die Optimierung einer Produktivkonfiguration unbedingt wert. Stellen Sie sofort um: Übernehmen Sie die Regeln des Beispiels für einen virtuellen HTTPS-Host in Ihren virtuellen Host (mit dem statischen Cache auchstaticcache_offload.conf), setzen SieAllowOverride None, führen Sieapachectl configtestaus, laden Sie Apache neu und testen Sie die Website. Dieselben Regeln für andere Server: nginx, LiteSpeed, Caddy, IIS, Velocity (eingebaut); wohin Regeln für virtuelle Hosts in einem Control Panel gehören: Plesk, cPanel, DirectAdmin, ISPConfig. Unter LiteSpeed oder OpenLiteSpeed kann zusätzlich der Seiten-Cache des Servers anonyme Besucher und Crawler ohne PHP bedienen: Seiten-Caching mit LiteSpeed und OpenLiteSpeed.
| Befehl | Wirkung |
|---|---|
./console exp:setup:status | Sagt, von welcher Vorlage .htaccess eine Kopie ist und ob config.php eine einfache Kopie ist, Einstellungen setzt oder sich nicht kompilieren lässt |
./console exp:setup:htaccess [--static] [--force] --apply | Kopiert .htaccess_root (mit --static: .htaccess_root_static) nach .htaccess |
./console exp:setup:config [--force] --apply | Kopiert config.php-RECOMMENDED nach config.php |
./console exp:config:list [--only-set] [--format=json] | Jede beschriebene Einstellung mit dem Wert in config.php, dem Vorschlag und ihrer Beschreibung |
./console exp:config:get <NAME> | Ein Wert, schlicht, für ein Skript (Exit-Code 1, wenn er nicht gesetzt ist) |
./console exp:config:set <NAME> <wert> [--type=<t>] --apply | Setzt einen Wert an Ort und Stelle, entfernt den Kommentar vor seiner beschriebenen Zeile oder fügt ihn hinzu |
./console exp:config:unset <NAME> --apply | Kommentiert die Einstellung wieder aus |
Was sie sicher macht
- Erst der Probelauf. Ohne
--applyzeigt jeder Befehl, was er ändern würde;--applyzusammen mit--dry-runist ein Bedienfehler (Exit-Code 2). - Kein stilles Überschreiben. Eine vorhandene
.htaccessoderconfig.php, die von der Vorlage abweicht, wird als Diff gezeigt und ohne--forcebehalten. - Eine Sicherung vor jedem Schreiben, nach
var/backup/setup/<zeit>/odervar/backup/config/<zeit>/, mit Modus und Eigentümer der Datei, in Verzeichnissen mit Modus0700. - Atomares Schreiben über eine temporäre Datei im selben Verzeichnis, die an ihren Platz umbenannt wird.
- Eigentümer und Modi wie bei
cp -a. Eine neue Datei bekommt den Modus der Vorlage und, als root, ihren Eigentümer (nie root); eine vorhandene behält ihre eigenen.--modeund--owner=benutzer[:gruppe]setzen sie;-vgibt jede Kopie aus wiecp -v. config.phpwird geparst, nicht durchsucht. Sie wird als PHP-Tokens gelesen und nie ausgeführt; nur der Wert einesdefine( 'NAME', wert )ändert sich, Kommentare, Reihenfolge und Formatierung bleiben. Eindefine()in einer Bedingung wird gemeldet und nicht angefasst.- Geprüft, bevor sie landet. Eine neue
config.phpmussphp -lbestehen und den verlangten Wert zurücklesen lassen. Eineconfig.php, die sich nicht kompilieren lässt, wird abgelehnt, und./consolestartet trotzdem, um sie zu reparieren. - Typisierte Werte.
bool,int,octal(Modi wie0640),float,string,null, aus--type, dem aktuellen oder dem beschriebenen Wert. - Geheimnisse maskiert. Werte von Namen mit
PASS,SECRET,KEY,TOKEN,CREDENTIALoderPWDerscheinen in jeder Ausgabe und jedem Diff als********, außer mit--show-secrets; wer eines in eine für alle lesbareconfig.phpschreibt, bekommt eine Warnung. - Nur bekannte Namen, die
config.php-RECOMMENDEDbeschreibt, außer mit--allow-unknown, so wird ein Tippfehler abgefangen statt geschrieben.
Beispiel
./console exp:setup:htaccess --apply -v
./console exp:setup:config --apply
./console exp:config:set EZP_INI_FILEMTIME_CHECK false --apply
./console exp:config:set EZP_FILE_MODE_MAX 0640 --apply
./console exp:config:list --only-set'.htaccess_root' -> '.htaccess'
PASS: .htaccess_root copied to .htaccess (mode 0644, owner www-data:www-data)
...
config.php: 2 setting(s) set, 30 documented in config.php-RECOMMENDED
INI FILES OPTIMIZATIONS
EZP_INI_FILEMTIME_CHECK false (line 57)
RECOMMENDED false - This new setting controls whether eZINI should check if the settings have been updated...
FILE PERMISSIONS
EZP_FILE_MODE_MAX 0640 (line 112)
RECOMMENDED 0640 - Set EZP_DIR_MODE_MAX and EZP_FILE_MODE_MAX to the widest modes any directory and any fi...Der ganze Durchgang, mit jeder Option, der Ausgabe jedes Falls, den Regeln für Sicherung und --force, Skripten,
Containern und Fehlerbehebung: .htaccess und config.php von der Konsole aus einrichten.
Für Entwickler
- Code:
kernel/classes/expsetupfilecopy.php(Kopie, Sicherung, atomares Schreiben,php -l),kernel/classes/expconfigphpeditor.php(der tokenbasiertedefine()-Editor),kernel/classes/expconfigphpcatalogue.php(die inconfig.php-RECOMMENDEDbeschriebenen Einstellungen), die Befehlekernel/private/classes/commands/setupfiles.phpundconfigphp.php, die Einstiegspunktebin/php/setupfiles.phpundbin/php/configphp.php. - Eine
config.php, die sich nicht kompilieren lässt, würdeautoload.phpanhalten.bin/php/console,bin/php/setupfiles.phpundbin/php/configphp.phpdefinieren vorherEXP_CONFIG_PHP_TOLERATE; nur für sie prüftautoload.phpdie Datei mit dem PHP-Parser und liest sie nicht, wenn sie sich nicht kompilieren lässt (EXP_CONFIG_PHP_SKIPenthält den Fehler). Jeder andere Einstiegspunkt liestconfig.phpwie bisher. - Eine neue Einstellung wird den Befehlen bekannt, indem sie in
config.php-RECOMMENDEDwie die anderen beschrieben wird: ein Kommentarblock (eine mit Strichen unterstrichene Überschrift beginnt einen Abschnitt), gefolgt von//define( 'NAME', wert );. - Tests:
tests/tests/kernel/private/classes/commands/expSetupFilesAndConfigPhpCommandsTest.php(ohne Datenbank). - Erzeugte Referenz: exp:setupfiles, exp:configphp.
Verwandte Seiten
- Installation: den Code beschaffen, Die Website ausliefern
- Einstellungen von der Befehlszeile ändern: exp:ini, für die INI-Dateien in
settings/ - Der Generator für den statischen Cache, den
.htaccess_root_staticausliefert - Dateimodi