web-dev-qa-db-ja.com

Wordpressが.htaccessルールを見ていない

私は現在中小企業のウェブサイトを構築していて、私はホームサーバーでホスティングしています、そして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"にしても効果はありません。私はあなたにもっと多くの情報を提供しようとしました、しかし、あなたがもっと私に尋ねるのを必要とするならば。

1

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ファイルに入るべきであることを意味しますか?

1
MrWhite