WordPressとプラグインが.htaccess
ファイルを上書きしないようにするにはどうすればよいですか?私は私のパーマリンクの構造を設定するためにWordpressを使います。だから私はそれがファイルへのすべてのアクセス許可を拒否することは現実的ではないかと思います。
WordPressがファイルの上書きを担当する可能性が低いと思われる場合は、担当するものを特定するためのアドバイスが役立ちます。
私は最近、トラフィックをHTTPSにリダイレクトするためにこれらのルールを.htaccessに追加しました。
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
1日後、.htaccessが以前の状態に戻ったことがわかりました。以下は、意図したとおりの.htaccessファイルの一部です。
# 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
このコードは、.htaccessファイルが上書きされるまで、予想どおり301のステータスでトラフィックをリダイレクトします。
- 更新 - .htaccessファイルのいくつかのセクションにコメントを入れ、どれが上書きされたのかを観察することで、プラグインW3 Total Cacheが以下のコメントを付けたセクション全体を上書きしたことを発見しました。
# BEGIN W3TC Page Cache core
あなたの "カスタム"ディレクティブを# BEGIN ...
/# END ...
コメントマーカーの外側に置くと、それらが更新されたときにWordPress(およびプラグイン)してはいけませんを上書きします。 (もちろん、 "Nice"ではないプラグインがある場合は、それらを許可していれば.htaccess
に何でもできるので、この場合@hazが提案するようなことをする必要があります。)
あなたの場合、あなたは単にそれらのディレクティブを# BEGIN W3TC Page Cache core
コメントの上に置くことができます。例えば:
# 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]
:
RewriteEngine On
ディレクティブを繰り返す必要はありません(それがファイルのどこかにある場合)。そしてあなたの指令はとにかくRewriteBase
を使用していません - しかし、やはりRewriteBase
はファイル内で一度だけ現れるべきです。 (これらの各指令の最後のインスタンスは、ファイル全体を制御するものです。)
(Aside:RewriteRule
patternを囲む括弧は、ディレクティブでは不要です。)
Wordpressは、パーマリンクを変更した場合など、特定の状況下では必ず.htaccessファイルを書き換えます。
あなたのように、私たちは.htaccessファイルの中にカスタムのものをたくさん持っています。私はWordpressよりもdevOpsの人たちの手に委ねることを望みます。
あなたがサーバーへのアクセス権を持っているなら最も簡単な方法は.htaccessのファイル許可を変更することです。
& chmod a-w .htaccess
これにより、すべてのユーザーに対する書き込みアクセス権が削除されます。あなたがあなたのWordpressインスタンスへのシェルアクセスを持っていないならば、あなたのホスティングプロバイダーはあなたがあなたのファイル許可を変えることができるかもしれないファイルエクスプローラタイプ設定を提供するかもしれません。
あるいは、ファイルの所有権を変更することもできます。
& chown root:root .htaccess
& chmod 644 .htaccess
これはあなたのApacheユーザー設定によってはうまくいかないかもしれませんし、ホスティングプロバイダーから提供されるオプションではないことはほぼ間違いありません。
あなたが使うことができる3つ目のオプションは、ここでもまたあなたがあなたのサーバの管理下にいることを必要とします、あなたの不変の設定(あなたのHTTPS書き換えのような).
<VirtualHost *>
ServerName www.mysite.com
DocumentRoot /var/www/mysite.com/wordpress/
Include /var/www/mysite.com/custom-Apache-settings.conf
</VirtualHost>
彼の答えで危険が述べたように、WordPressは.htaccessを上書きするでしょう(そしてできるはずです)。
ただし、 mod_rewrite_rules filterを使用して自分で追加することもできます。簡単にするために、ファイル.htaccess.customを追加し、そこに自分のルールを入れて、その内容をフィルタ内の$ rulesに追加することができます。 $規則を返すことを忘れないでください。