Wordpress 404页面显示在具有自己的404页面的子目录上

时间:2012-07-25 04:02:20

标签: wordpress .htaccess

http://website.com/sub/index.html这样具有自己的子目录.htaccess仍然出于某种原因显示我在Wordpress上面的404页面,该页面位于此目录上方。

.htaccess for sub dir:

ErrorDocument 404 /404.html

.htaccess for main dir:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^website.net$ [OR]
RewriteCond %{HTTP_HOST} ^www.website.net$
RewriteRule ^foghelper.php$ http://website.net/subdirone/ [R=301,L]
RewriteRule ^foghelper.php$ http://website.net/subdirtwo/ [R=301,L]
# DO NOT REMOVE THIS LINE AND THE LINES ABOVE jNLK5d:REDIRECTID


# 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

如果您想知道,那么hta中的链接会受到审查。

修改:

RewriteCond %{REQUEST_URI} !^/?sub/之前添加RewriteRule . /index.php [L]后,错误似乎仍然存在。

2 个答案:

答案 0 :(得分:0)

所有内容都通过wordpress进行路由,因此当/sub/no_file.html之类的请求不存在时,wordpress会将其路由到index.php,因为它同时满足!-f!-d {1}}条件(不是现有文件而不是现有目录)。然后它决定找不到/sub/no_file.html的资源,然后显示自己的404文件。

如果您希望转到/ sub的请求绕过wordpress'路由,以便在/sub/中请求不存在的文件,/404.html获得服务,则可以添加此行在wordpress规则中RewriteRule . /index.php [L] 之前,它们看起来像这样:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/?sub/
RewriteRule . /index.php [L]
</IfModule>

答案 1 :(得分:0)

默认的.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

魔术是以RewriteCond开头的。他们指示Apache应用规则RewriteRule。 /index.php [L](表示“任何URL将转到index.php”),仅当URL不是现有文件时!-f或现有目录!-d。

所以这应该默认工作。当您尝试访问现有文件时,Wordpress重写规则不适用。