尝试访问 www.website.com/server-status 时出现禁止错误
mod_status 已启用
虚拟主机:
<VirtualHost *:8080>
ServerName website.com
ServerAlias www.website.com
DocumentRoot /var/www/wordpress/
DirectoryIndex index.php
<Directory /var/www/wordpress/>
AllowOverride All
Order Deny,Allow
Allow from all
Options +Indexes
</Directory>
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .website.com
</Location>
ErrorLog /var/www/wordpress/logs/error.log
CustomLog /var/www/wordpress/logs/access.log combined
</VirtualHost>
我尝试将“允许”从 .website.com 更改为网站 IP,但出现同样的问题。当我尝试将其更改为“允许”时,我收到 404。
我做的另一次尝试是从 127.0.0.1 设置允许并从服务器内部通过 lynx 访问,问题几乎相同。
以下是 error.log 中收到的错误:
[error] [client 127.0.0.1] client denied by server configuration: /var/www/wordpress/server-status
此外,我已禁用 status.conf 位置覆盖,以确保唯一的服务器状态定义位于 VirtualHost 中。在 apache.conf 中设置服务器状态位置可提供相同的结果。
知道我遗漏了什么吗?
我尝试过以下资源,但都没有提供解决方案:
谢谢
答案1
允许来自行与您的网站无关。Allow from
允许具有指定 IP 地址(或解析为 IP 的域名)的人们访问您的网站。
因此,如果你家的 IP 地址是 2.2.2.2,你可以allow from 2.2.2.2
输入不是 allow from yourownwebsite.com
。
这应该可以修复您的 403(禁止访问),尽管我知道您说您尝试将其更改为 127.0.0.1,并直接从服务器访问它。您是否尝试过将 127.0.0.1 更改为localhost
?
现在,关于 404。这是完全不同的问题。这是“未找到”错误,而不是“禁止”错误。
默认情况下,VirtualHost 容器实际上并不适合与 mod_status 一起使用。它根本不起作用。根据本网站,您有 2 个选择:
- 让服务器监听其他端口(比如 8080)
- 将 <VirtualHost *:80> 中的星号更改为你的服务器的公共 IP 地址 - 然后,你就可以访问服务器状态仅有的来自本地主机/127.0.0.1
答案2
检查您是否具有正确的 VirtualHost 配置。您可以尝试为 创建 VirtualHost 配置127.0.0.1
,如下所示:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName 127.0.0.1
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www>
Options +FollowSymLinks
AllowOverride None
order allow,deny
allow from all
</Directory>
</VirtualHost>
找到了这里
答案3
我对 WordPress 不太了解,但如果它是 Laravel、Magento 或任何其他在 Apache 上运行的 Web 软件,那么.htaccess位于根目录中的文件,一个简单的例子来自https://codex.wordpress.org/htaccess就在这里:
# 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
我敢打赌,如果你改变
AllowOverrides All
到
AllowOverrides None
该页面出现了,然而对我来说.htaccess 文件和 httpd.conf 的混合,以及 Apache 的所有配置文件的混乱,我选择以不同的方式来处理这个问题。
我选择将 .htaccess 文件从上面显示的内容更改为:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /server-status
RewriteRule ".?" "-" [S=1]
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
这将导致 RewriteCond 匹配端点 uri,然后让 RewriteRule 跳过将所有端点重写为 index.php 的控制规则,以便 wordpress 引擎可以使用动态 url。
可能有更简单的方法,但我的 http.conf 如下:
<VirtualHost *:8080>
ServerName website.com
ServerAlias www.website.com
DocumentRoot /var/www/wordpress/
DirectoryIndex index.php
<Directory /var/www/wordpress/>
AllowOverride All
Order Deny,Allow
Allow from all
Options +Indexes
</Directory>
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 10.0.0.0/24
</Location>
ErrorLog /var/www/wordpress/logs/error.log
CustomLog /var/www/wordpress/logs/access.log combined
</VirtualHost>
一些后续阅读?