【问题标题】:wordpress change permalink 404 message - 301 redirectwordpress 更改永久链接 404 消息 - 301 重定向
【发布时间】:2016-10-15 19:19:44
【问题描述】:

我的问题与Wordpress (Postname Permalink) 404 error 类似,但超出了问题范围。

我的客户在默认的 Wordpress 博客结构 YYYY/MM/post-name 中有数百页

他们想把它移到永久链接结构/post-name

但是,Google 和其他搜索引擎中的现有链接必须重定向到正确的“新”页面,而不是 404 或主页。

我的问题是,使用最新版本的 Wordpress(在撰写本文时为 4.6.1) - 如果您只是进入 SETTINGS>Permalinks>Post-Name,它会正常工作吗?

您还需要修改 .htaccess 文件以使“旧页面”重定向到新页面吗?

如果是这样 - 正确的 .htaccess 文件语法是什么,以便每个新链接都是“301 重定向”,告诉搜索引擎该页面已永久移动?

谢谢!

另见Wordpress Codex on Permalink Structure

【问题讨论】:

    标签: php wordpress .htaccess redirect


    【解决方案1】:

    在你的functions.php中使用这个模板作为替代

    add_action('template_redirect','check404');
    function check404(){
    
         if (is_404() ) {
    
            $url = $_SERVER['REQUEST_URI'];
            $url = esc_url_raw( $url );
    
            //FIND IF THERE IS A POST...
            $e = explode("/", $url);
    
            $reversed = array_reverse($e);
            $number = $reversed[0];
    
            $link = get_permalink($number);
            if(!empty($link)){
                wp_redirect( $link, 301 );
                exit;
            }
            else
                return;
         }
    
    }
    

    这将重定向/YYYY/MM/post-name/ -> /post-name/

    【讨论】:

    • 好主意! functions.php 在单个主题文件夹中,对吗?或者这是一个全局函数?你会把这个 add_action 命令放在哪里?你是说只需将上面的代码添加到函数中,它就会神奇地工作吗?如果您在 url 中也有“类别”,即类别/帖子名称怎么办?
    • @Viktor,如果您喜欢这个答案,并且觉得它很有用,请不要忘记投票。
    • 普罗斯蒂-谢谢。在我有机会测试它之后,我会将它标记为已检查。你能快速回答我上面的问题吗?你好吗/category/postname/
    • 上面的解决方案甚至适用于 /category/postname 和 /tag/postname/ 甚至 /new/kids/on/the/block/postname。你可以问新问题并@prosti me...
    • 如果您发现其他答案有用,请不要害怕支持
    【解决方案2】:

    你可以在你的.htaccess试试这个

    RewriteEngine On
    Redirect 301 /YYYY/MM/post-name/ http://yoursite.com/post-name/
    

    您可以创建一个名为 enumerate.php 的文件来列出您的所有帖子:

    include "wp-load.php";
    
    $posts = new WP_Query('post_type=any&posts_per_page=-1&post_status=publish');
    $posts = $posts->posts;
    
    header('Content-type:text/plain');
    foreach($posts as $post) {
        switch ($post->post_type) {
            case 'revision':
            case 'nav_menu_item':
                break;
            case 'page':
                $permalink = get_page_link($post->ID);
                break;
            case 'post':
                $permalink = get_permalink($post->ID);
                break;
            case 'attachment':
                $permalink = get_attachment_link($post->ID);
                break;
            default:
                $permalink = get_post_permalink($post->ID);
                break;
        }
        echo "\n{$permalink}";
        //echo "\n{$post->post_type}\t{$permalink}\t{$post->post_title}";
    }
    

    将枚举放入 WordPress 主文件夹,您将获得可用于 .htaccess 文件的列表。

    【讨论】:

      【解决方案3】:

      最后,您可以尝试更新永久链接结构 :),并尝试使用旧 URL。

      如果出现问题,您可以恢复到旧的永久链接结构。

      【讨论】:

        猜你喜欢
        • 2016-04-05
        • 2012-07-09
        • 1970-01-01
        • 1970-01-01
        • 2015-05-04
        • 2013-08-14
        • 2016-02-11
        • 2017-12-20
        相关资源
        最近更新 更多