我在 Apache 服务器上托管了几个网站。大多数网站都可以通过 http 和 https 访问。其中一个网站可能仅有的可以通过 http 访问。尝试通过 https 访问必须重定向到 404.php 页面 (除了尝试访问错误页面本身——应该允许)。
我可以使用 ErrorDocument 指令显示自定义文本消息,但我不知道如何将用户发送到 404 页面。配置如下所示:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName myserver
ServerAlias myserver
SSLEngine On
SSLProxyEngine On
SSLCertificateFile /path/to/certificatefile.pem
SSLCertificateKeyFile /path/to/keyfile.pem
Include /etc/ssl-apache.conf
DocumentRoot /usr/local/website
Redirect 404 /
# This works!
ErrorDocument 404 "Not here!"
# This tries to redirect to the path to the 404.php file but does *not* work
#ErrorDocument 404 /wordpress/wp-content/themes/Theme1/404.php
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/usr/local/website/html/wordpress">
AllowOverride All
Require all granted
</Directory>
<Directory />
# required for apache 2.4+
AllowOverride All
Require all granted
Options +Includes
XBitHack on
# allows CORS for static content
Header set Access-Control-Allow-Origin *
</Directory>
</VirtualHost>
</IfModule>
尝试使用 ErrorDocument 重定向到 404.php 会导致:
该服务器上未找到所请求的 URL /。
此外,尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。
我也尝试过ErrorDocument 404 https://myserver/wordpress/wp-content/themes/Theme1/404.php
但导致“重定向太多”。
如何让对此 VirtualHost 的所有请求重定向到自定义 404 页面?
答案1
删除以下行:
Redirect 404 /
并使用您的原始内容:
ErrorDocument 404 https://myserver/wordpress/wp-content/themes/Theme1/404.php