在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]
后,错误似乎仍然存在。
答案 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重写规则不适用。