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

在我的Apacheconfiguration我有以下设置

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

使用此服务器状态的作品,但如果我更改allowoverride选项,所有它不。 如果allowoverride选项设置为All,如何获得服务器状态

我跟着这个,但仍然没有运气的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 

首先,我对你在位置块中使用以下内容感到困惑,我觉得你可能想要拒绝所有的,但也许允许你自己的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中的某些内容正在重写/ server-status的function由服务器状态处理程序处理。 在.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,处理程序应该能够performance得像预期的那样。

另外两个条件

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

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

您可以在官方文档中阅读更多关于Mod_Rewrite的信息 。

获取服务器状态页面与Wordpress重写规则一起工作的最简单的方法是在Wordpress文件夹中创build名称为server-status的文件夹或文件

这是有效的,因为(正如WerkkreW指出的那样)规则:

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

意味着如果存在具有相同名称的文件或目录,则不应该进行重写。