每当我调用一个不存在的页面时,说http://www.example.com/foobar/, 它应该调用404.php
主题模板文件。
然而,在我的情况下,网站重定向到主页,/
我不确定我过去是怎么做到这一点的。
我如何确保404。当文件不存在时,php优先?
仅供参考:
我的htaccess文件位于下面。。。
我不确定前两个IfModule
s来自。我最近尝试并禁用了缓存插件。我已转到永久链接设置并重新保存。
我正在运行多站点。该站点是所讨论的主要站点。我可能需要保留关闭多个站点的能力。
正在删除。。。
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
。。。不起作用。
之后移除整个部分# BEGIN WordPress
导致服务器级别404:“未找到。在此服务器上未找到请求的URL。此外,在尝试使用ErrorDocument处理请求时遇到404未找到错误。”
# BEGIN LSCACHE
# END LSCACHE
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/?wp\\-content/+debug\\.log$
RewriteRule .* - [F,L,NC]
</IfModule>
<IfModule !mod_rewrite.c>
<Files "debug.log">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\\.php)$ $1 [L]
RewriteRule . index.php [L]
</IfModule>
# END WordPress
# Modified for Multisite https://www.namecheap.com/support/knowledgebase/article.aspx/9191/29/how-to-create-a-wildcard-subdomain-in-cpanel
# Previous here:
# RewriteEngine On
# RewriteBase /
# RewriteRule ^index\\.php$ - [L]
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule . /index.php [L]
# Wordfence WAF
<Files ".user.ini">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
# END Wordfence WAF
# BEGIN cPanel-generated php ini directives, do not edit
# Manual editing of this file may result in unexpected behavior.
# To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
# For more information, read our documentation (https://go.cpanel.net/EA4ModifyINI)
<IfModule php7_module>
php_flag display_errors Off
php_value max_execution_time 1000
php_value max_input_time 1000
php_value max_input_vars 8000
php_value memory_limit 1024M
php_value post_max_size 128M
php_value session.gc_maxlifetime 1440
php_value session.save_path "/var/cpanel/php/sessions/ea-php70"
php_value upload_max_filesize 128M
php_flag zlib.output_compression Off
</IfModule>
# END cPanel-generated php ini directives, do not edit
# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php70” package as the default “PHP” programming language.
<IfModule mime_module>
AddHandler application/x-httpd-ea-php70 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
最合适的回答,由SO网友:Robert Andrews 整理而成
在我的例子中,问题是多站点配置属性NOBLOGREDIRECT
这已在wp config中设置。php。。。
// Redirect non-existent Multisite subdomain calls to www primary site
define( \'NOBLOGREDIRECT\', \'http://www.example.com\' );
这可以防止出现有效的404,因为它总是被解释为对子域的错误调用。
有两种解决方案:
如所述,对其进行注释@brij\'s post (通过Google发现),在wp配置中覆盖它:。php、NOBLOGREDIRECT的定义是,当有人进入您站点上不存在的子域时,可以重定向到您希望的url。但糟糕的是,当有人试图访问不存在的域页面时,它会重定向到NOBLOGREDIRECT定义的位置,而不是抛出404。要修复它,请在函数中添加以下PHP代码。php或任何相关文件
<?php remove_action( \'template_redirect\', \'maybe_redirect_404\' ); ?>