it-swarm.com.de

Verhindern Sie, dass WordPress und Plugins .htaccess überschreiben

Wie kann ich verhindern, dass WordPress und Plugins meine .htaccess-Datei überschreiben? Ich benutze Wordpress, um die Struktur meiner Permalinks festzulegen. Daher bezweifle ich, dass es praktisch ist, alle Berechtigungen für die Datei zu verweigern.

Wenn es unwahrscheinlich ist, dass WordPress für das Überschreiben der Datei verantwortlich ist, ist es hilfreich, zu bestimmen, was verantwortlich ist.

Ich habe diese Regeln kürzlich zu .htaccess hinzugefügt, um den Datenverkehr zu HTTPS umzuleiten.

    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]

Einen Tag später stellte ich fest, dass .htaccess zu seinem vorherigen Zustand zurückgekehrt war. Das Folgende ist ein Teil der .htaccess-Datei, wie ich es beabsichtige.

# BEGIN W3TC Page Cache core
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
    RewriteCond %{HTTPS} =on
    RewriteRule .* - [E=W3TC_SSL:_ssl]
    RewriteCond %{SERVER_PORT} =443
    RewriteRule .* - [E=W3TC_SSL:_ssl]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteRule .* - [E=W3TC_ENC:_gzip]
    RewriteCond %{HTTP_COOKIE} w3tc_preview [NC]
    RewriteRule .* - [E=W3TC_PREVIEW:_preview]
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{QUERY_STRING} =""
    RewriteCond %{REQUEST_URI} \/$
    RewriteCond %{HTTP_COOKIE} !(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle) [NC]
    RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/page_enhanced/%{HTTP_Host}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html%{ENV:W3TC_ENC}" -f
    RewriteRule .* "/wp-content/cache/page_enhanced/%{HTTP_Host}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html%{ENV:W3TC_ENC}" [L]
</IfModule>
# END W3TC Page Cache core

Dieser Code leitet den Verkehr mit dem Status 301 wie erwartet weiter, bis die .htaccess-Datei überschrieben wird.

--Update-- Durch das Platzieren von Kommentaren in mehreren Abschnitten der .htaccess-Datei und das Beobachten, welcher überschrieben wurde, stellte ich fest, dass das Plug-in W3 Total Cache den gesamten Abschnitt überschrieb, mit dem der Kommentar geschrieben wurde

# BEGIN W3TC Page Cache core
1

Wenn Sie Ihre "benutzerdefinierten" Anweisungen außerhalb von # BEGIN .../# END ... Kommentar-Markierungen platzieren, sollten WordPress (und Plugins) diese nicht überschreiben, wenn sie aktualisiert werden. (Wenn Sie Plugins haben, die nicht "Nice" spielen, können sie .htaccess ändern, wenn Sie dies zulassen. In diesem Fall müssten Sie also etwas tun, wie es @haz vorschlägt.)

In Ihrem Fall können Sie diese Anweisungen einfach über dem # BEGIN W3TC Page Cache core-Kommentar platzieren. Zum Beispiel:

# Custom directives
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]

# BEGIN W3TC Page Cache core
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} =on
    RewriteRule .* - [E=W3TC_SSL:_ssl]
    :

Sie müssen die RewriteEngine On-Direktive nicht wiederholen (sofern sie irgendwo in der Datei vorkommt). Und Ihre Direktiven verwenden RewriteBase sowieso nicht - aber auch hier sollte RewriteBase nur einmal in der Datei vorkommen. (Die letzte Instanz jeder dieser Anweisungen steuert die gesamte Datei.)

( Nebenbei: Die Klammern um die RewriteRule Muster sind in Ihrer Direktive überflüssig.)

2
MrWhite

Wordpress schreibt Ihre .htaccess-Datei unter bestimmten Umständen definitiv neu, z. B. wenn Sie Permalinks ändern.

Wie Sie haben wir eine Reihe von benutzerdefinierten Dingen in unserer .htaccess-Datei, die ich lieber unseren devOps-Mitarbeitern als Wordpress überlassen würde.

Wenn Sie Zugriff auf den Server haben, können Sie die Dateiberechtigungen für .htaccess am einfachsten ändern

& chmod a-w .htaccess

Dies entfernt den Schreibzugriff für alle Benutzer. Wenn Sie keinen Shell-Zugriff auf Ihre Wordpress-Instanz haben, bietet Ihr Hosting-Anbieter möglicherweise eine Einstellung für den Typ des Datei-Explorers an, in der Sie möglicherweise Ihre Dateiberechtigungen ändern können.

Alternativ können Sie den Dateibesitz ändern:

& chown root:root .htaccess
& chmod 644 .htaccess

Dies hängt möglicherweise nicht von Ihren Apache-Benutzereinstellungen ab und wird mit ziemlicher Sicherheit nicht von Ihrem Hosting-Anbieter angeboten.

Eine dritte Option, die Sie verwenden können und die wiederum erfordert, dass Sie die Kontrolle über Ihren Server haben, besteht darin, Ihre unveränderlichen Einstellungen (wie z. B. Ihr HTTPS-Umschreiben) in eine andere Include-Datei in Ihren VirtualHost-Einstellungen zu kopieren.

<VirtualHost *>
    ServerName www.mysite.com
    DocumentRoot /var/www/mysite.com/wordpress/
    Include /var/www/mysite.com/custom-Apache-settings.conf
</VirtualHost>
4
haz

Wie in seiner Antwort angegeben, wird (und sollte) WordPress den .htaccess überschreiben können.

Sie können jedoch mod_rewrite_rules filter verwenden, um eigene Regeln hinzuzufügen. Um es einfach zu halten, können Sie eine Datei .htaccess.custom hinzufügen, Ihre Regeln dort einfügen und deren Inhalt zu $ ​​rules im Filter hinzufügen. Vergiss nicht, $ rules zurückzugeben.

1
janh