私は現在中小企業のウェブサイトを構築していて、私はホームサーバーでホスティングしています、そしてWordpressが私が.htaccessに置いた規則のどれにも従わなかったのでセキュリティを強化できないことで障害を突きつけました。私はできれば私以外のIPからのwp-login.phpまたはwp-adminへのアクセスをブロックしたいと思います。だから私は私があちこちで見つけているコードのこのビットを使いました:
ErrorDocument 401 /path-to-your-site/index.php?error=404
ErrorDocument 403 /path-to-your-site/index.php?error=404
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR} !^IP Address One$
RewriteCond %{REMOTE_ADDR} !^IP Address Two$
RewriteCond %{REMOTE_ADDR} !^IP Address Three$
RewriteRule ^(.*)$ - [R=403,L]
</IfModule>
しかし、それはうまくいきませんでしたので、もう一度試してみました。
# Block access to wp-admin.
order deny,allow
allow from x.x.x.x
deny from all
(指示通りにこれらはwp-adminの.htaccessに入っていますが、うまくいきませんでしたのでコピーして "html"フォルダに入れてもどちらもうまくいきませんでした)。それはただコードを使ったものでなければならないと思いました。だから私はただ "html"フォルダの外にある.htpasswdファイルと両方の.htaccessファイルの中のこのコードでwp-login.phpをパスワードで保護することができると決心しました:
# Protect wp-login
<Files wp-login.php>
AuthUserFile /var/www/.htpasswd
AuthName "Private access"
AuthType Basic
require user insertusernamehere
</Files>
しかし、それでもうまくいきませんでした。WPでは、そこにルールが何も表示されていないと思います。
これは現在、両方の.htaccessファイルのコードです。
ErrorDocument 401 /var/www/html/wp-content/themes/zerif-lite/index.php?error=404
ErrorDocument 403 /var/www/html/wp-content/themes/zerif-lite/index.php?error=404
#Protect wp-login
<Files wp-login.php>
AuthUserFile /var/www/.htpasswd
AuthName "Private access"
AuthType Basic
require user wpsecure
</Files>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR} !^INSERTMYIPHERE$
RewriteRule ^(.*)$ - [R=403,L]
</IfModule>
(commented)Block access to wp-admin
order deny,allow
allow from INSERTMYIPHERE
deny from all
(commented)BEGIN WordPress
(commented)END WordPress
私は数日間これと戦ってきましたが、ほとんど進歩していません。私はこのウェブサイトを見ました: https://www.keycdn.com/support/htaccess-not-working/ そこに何かがあったかどうか確認するために、そしてApacheの "AllowOverride"は "None"に設定されていますがそれを変更します"All"にしても効果はありません。私はあなたにもっと多くの情報を提供しようとしました、しかし、あなたがもっと私に尋ねるのを必要とするならば。
Apacheの "AllowOverride"は "None"に設定されていましたが、 "All"に変更しても効果がありませんでした。
:
"Apache2.conf"ファイルの "AllowOverride"を変更しました。
正確にあなたがAllowOverride
を設定している場所はまだ明確ではありません。このディレクティブはディレクトリコンテキストでのみ使用できます。すなわち。メインサーバーまたはVirtualHost設定の<Directory>
コンテナの中。
あなたはすでに次のようなセクションを持っているべきです(それは変更されるべきではありません):
<Directory "/">
AllowOverride None
</Directory>
サーバールート(つまり"/"
)はNone
にのみ設定する必要があります。そうしないと、Apacheはサーバールートに至るまで.htaccess
ファイルを検索するため、セキュリティやパフォーマンスの問題が生じる可能性があります。
代わりに、ドキュメントのルートディレクトリに対してのみこれをオーバーライドする必要があります。これはおそらくあなたのサイトのあなたの特定の<VirtualHost>
に入ります。 (またはメインサーバーの設定 - 上記の<Directory>
コンテナの後 - サーバー全体に対して1つのサイトしか設定されていない場合)。次に例を示します。
<Directory "/var/www/html">
AllowOverride All
</Directory>
/var/www/html
があなたのドキュメントルートの絶対ファイルシステムパスであると仮定すると、そこには.htaccess
ファイルがあります。
ErrorDocument 401 /var/www/html/wp-content/themes/zerif-lite/index.php?error=404 ErrorDocument 403 /var/www/html/wp-content/themes/zerif-lite/index.php?error=404
脇:ErrorDocument
ディレクティブで指定されたパスは、サーバーのルートではなく、ドキュメントのルートからの相対パスである必要があります。
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR] RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
注意してくださいこれらはwp-admin の.htaccessで指示されているようになっています
最初の2つの条件(RewriteCond
ディレクティブ)は、これらが.htaccess
サブディレクトリの.htaccess
ファイルではなく、ルートの/wp-admin
ファイルに入るべきであることを意味しますか?