web-dev-qa-db-ja.com

allowoverrideがallに設定されている場合、サーバーステータスが機能しません

私のApache設定では、次の設定があります

<Directory "/opt/website/new-website-old/httpdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Location /server-status>
    #AllowOverride None
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from all
</Location>

これを使用すると、server-statusは機能しますが、allowoverrideオプションをすべてに変更しても機能しません。 allowoverrideオプションがAll

私はこれに従いましたが、それでも運がありません ワードプレスサーバーのステータス

私の現在のhtアクセスファイルには

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_Host} ^www.asb.com.au$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/about/the-group/domain-asb$1 [R=301,L]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
1
shorif2000

まず、ロケーションブロックで次のものを使用していることに混乱しています。おそらくすべてを拒否したいと思うかもしれませんが、おそらく自分のIPからは許可しますが、私は逸脱します。

Deny from all
Allow from all

あなたが投稿したガイドからあなたが見逃した最も重要なことは次の行でした:

RewriteCond %{REQUEST_URI} !=/server-status

これにより、.htaccessファイルは次のようになります。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !=/server-status
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

その上、.htaccessには2つの別々の書き換えブロックがあり、ほぼ同じであるようです。それらを1つに組み合わせて、.htaccessの最終的な内容を(他には何も)しません。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !=/server-status
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_Host} ^www.asb.com.au$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/about/the-group/domain-asb$1 [R=301,L]
</IfModule>

もう少し詳しく説明しますが、AllowOverrideをnoneに設定すると、Apacheは.htaccessファイルを完全に無視するため、allに設定すると、.htaccessの何かが/ server-statusの機能をオーバーライドしていることがわかります。サーバーステータスハンドラーによって処理されます。 .htaccessファイルでは、問題のある行は基本的に次のとおりです。

RewriteRule . /index.php [L]

これは、Apacheにすべてを書き直してindex.phpに送信するように指示しているためです。これは、wordpressがindex.phpを介してすべてを処理し、とりわけSEOURLを許可するためです。

追加した行:

RewriteCond %{REQUEST_URI} !=/server-status

URIが/ server-statusでない限り、上記のことを実行するようにApacheに指示します(RewriteRuleに基づいてすべてをindex.phpに書き換えます)。これは、書き換えられてwordpress index.phpの場合、ハンドラーは期待どおりに動作できるはずです。

他の2つの条件

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

ご存知のとおり、リクエストが実際のファイルまたは実際のフォルダである場合は、URLを書き換えないようにApacheに指示してください。

Mod_Rewriteの詳細については、 公式ドキュメント を参照してください。

6
WerkkreW

サーバーステータスページをWordpress書き換えルールで機能させる最も簡単な方法は、Wordpressフォルダーにserver-statusという名前のフォルダーまたはファイルを作成することです。

これは、(WerkkreWが指摘しているように)ルールが次の理由で機能します。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

同じ名前のファイルまたはディレクトリがある場合は、書き換えを行わないでください。

2
Andy Madge