URI返回一个POST,而它应该返回一个404

时间:2016-04-19 作者:EvilKermitSaurus

早上好,全部

我有一个问题,我想我也有一个解决方案,但我想问一下,看看我的想法是否正确。

我有wp现场直播http://www.phmotorcycles.co.uk 我刚刚发现了一个异常现象,它可能是一个潜在的SEO灾难。

该网站使用插件工具集类型,我有一个自定义帖子类型的自行车。

因此,我们有一个遵循以下模式的客户URL结构:

域/新自行车/%制造商%/%类别%/%型号%

这一切都很好,但我现在发现,自行车可以返回错误的制造商和自行车类别,例如:

http://www.phmotorcycles.co.uk/new-bikes/ktm/duke/ktm-690-duke-2012/ (正确)

The same bike can be returned if you swap ktm for yamaha. Basically any incorrect combination of manufacturer or category with the bike at the end will return a page, which is not correct.

这两个链接都称为定制单打。php页面,它使用全局$post变量从WP数据库返回信息。

我的解决方案:

捕获url并将其拆分为单独的部分,以表示制造商、类别和型号

  • 为每条信息查询$post变量并比较,如果它们匹配得很好,如果它们不匹配,则强制使用404。这似乎很清楚,但对于Wordpress来说是新手,我不确定是否有更简单的方法来确保Wordpress为我做到这一点?

    任何建议、提示或窍门都将不胜感激。

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

    WordPress试图通过帖子名称猜测用户想要看到的帖子。这就是两者的原因example.com/new-bikes/ktm/duke/ktm-690-duke-2012/example.com/new-bikes/ktm/yamaha/ktm-690-duke-2012/ 返回相同且“正确”的内容。

    重要的是,如果您看到example.com/new-bikes/ktm/yamaha/ktm-690-duke-2012/, 您可以看到将规范URL正确设置为example.com/new-bikes/ktm/duke/ktm-690-duke-2012/. 用户得到他想要的东西,搜索引擎知道标准URL,所以每个人都赢了。

    所以,我不建议强制执行404错误example.com/new-bikes/ktm/yamaha/ktm-690-duke-2012/ 我认为你不应该为此担心。

    无论如何,如果您真的想避免该URL,我会将用户重定向到带有301状态码的规范URL,而不是强制使用404:

    add_action( \'template_redirect\', \'cyb_canonical_redirect\' );
    function cyb_canonical_redirect() {
        global $wp;
        if( is_singular() ) {
            $id = get_queried_object_id();
            $canonical_url = get_permalink( $id );
            $current_request = site_url( $wp->request );
            // Compare current request and canonical url
            if( $canonical_url !=  $current_request) {
                wp_redirect( $canonical_url, 301 );
                exit();
            }
        }
    }
    

    相关推荐

    Altered Media Library URLs

    我有一个客户的网站,是在他们离开另一家代理机构后我找到的。该机构使用了一个专有主题和自己的自托管页面生成器,以防止其在除他们之外的任何其他托管环境中更新或编辑。它的另一个方面是重新映射主题的URL并上载目录。因此,例如,代替WP在中查找主题文件http://domain.com/wp-content/themes/…. 它在里面找他们http://domain.com/t/….同样,对于图像上载,也可以在http://domain.com/wp-content/uploads/…, 它在里面找他们http