如果 allowoverride 设置为 all,则服务器状态不起作用

如果 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>

使用这个服务器状态有效,但如果我改变允许覆盖选项全部不起作用。如果允许覆盖选项设置为全部

我已经按照这个做了,但仍然没有运气wordpress 服务器状态

在我当前的 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

首先,我对您在位置块中对以下内容的使用感到困惑,我觉得您可能想拒绝所有人,但允许您自己的 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 中似乎有两个几乎相同的独立重写块,我会将它们合并为一个,以使 .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 中的某些内容覆盖了由 sever-status 处理程序处理 /server-status 的能力。在您的 .htaccess 文件中,有问题的行基本上是:

RewriteRule . /index.php [L]

它告诉 apache 重写所有内容并将其发送到 index.php,这是因为 wordpress 通过 index.php 处理所有内容并允许 SEO URL 等。

我们添加的行:

RewriteCond %{REQUEST_URI} !=/server-status

告诉 apache 执行我们上面所述的操作(根据 RewriteRule 将所有内容重写为 index.php),除非 URI 是 /server-status - 因为它将不再被重写并发送到 wordpress index.php,处理程序应该能够按预期运行。

另外两个条件

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

为了您的知识,如果请求是一个实际文件或一个实际文件夹,请告诉 apache 不要重写 url。

您可以在以下位置阅读有关 Mod_Rewrite 的更多信息官方文档

答案2

使服务器状态页面与 Wordpress 重写规则配合使用的最简单方法是在 Wordpress 文件夹中创建一个名为的文件夹或文件server-status

这样做的原因是(正如 WerkkreW 指出的)规则:

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

意思是如果存在同名的文件或目录,则不应进行重写。

相关内容