当URL是帖子或页面名称的前缀时,301重定向而不是404?

时间:2010-10-26 作者:ryan

大家好!我有一个奇怪的URL路由问题。当我请求一个不存在的URL时,例如。http://localhost/foo, wordpress正确返回404。但是,如果该URL是帖子或页面名称的前缀,则会返回指向帖子或页面的301重定向。

例如,如果我在2010年10月1日发布了一篇名为Food post的帖子,它将返回一个301,其中包含以下位置:http://localhost/2010-10-01_food_post (我的permalink结构)。同样,如果我有一个名为Food page的页面,它将返回一个301,其中包含以下位置:http://localhost/food_page.

你可以在我的live网站上看到这一点,http://snarfed.org/ . e、 g。http://snarfed.org/foo 重定向到http://snarfed.org/2009-10-30_food_highlights .

关闭永久链接(即切换到“默认”)可以修复帖子和页面的问题,但我当然不想这样做。

我在三个不同的安装上看到了这一点,都是wordpress 3.0.1和apache 2.2,两个是ubuntu lucid/mysql 5.1,一个是freebsd 7.3/mysql 5.0。我已经停用了所有插件,并从中删除了所有内容。htaccess除了下面的wordpress行之外,一字不差,但运气不好。

RewriteEngine On
RewriteBase /
RewriteRule ^wordpress/index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
提前感谢。。。

1 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

这很正常,因为redirect_canonical(), 它确保您始终处于“规范”URL(符合您的permalink结构),执行redirect_guess_404_permalink() 对帖子做出最佳猜测when the URL is incomplete. 如果你想防止这种情况,我认为最好的办法是the redirect_canonical filter, 如果是404,则返回false。类似这样:

add_filter(\'redirect_canonical\', \'no_redirect_on_404\');
function no_redirect_on_404($redirect_url)
{
    if (is_404()) {
        return false;
    }
    return $redirect_url;
}

结束

相关推荐

Slug is redirecting to 404

我有一个页面叫做菜谱。我将其更改为Recipes\\u old并更改了slug,以便创建一个新的Recipes页面。当我创建新配方页面时,slug被正确定义为/Recipes/但我无法访问该页面,WordPress正在将所有请求重定向到/Recipes\\u old/如何删除重定向?我已经删除了Recipes\\u old和Recipes。不过,slug仍在重定向。