5

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

.htaccess 用于子目录:

ErrorDocument 404 /404.html

.htaccess 用于主目录:

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]错误似乎仍然存在。

4

2 回答 2

0

一切都通过 wordpress 进行路由,因此当请求类似的东西/sub/no_file.html但它不存在时,wordpress 会通过它来路由它,index.php因为它同时满足!-fand!-d条件(不是现有文件,也不是现有目录)。然后它决定它找不到资源,/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>
于 2012-07-25T04:10:46.083 回答
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 重写规则不适用。

于 2013-01-15T16:56:31.017 回答