Welcome to the Question2Answer Q&A. There's also a demo if you just want to try it out.
+3 votes
1.8k views
in Q2A Core by

I need to redirect deleted questions to main question page. This is because the deleted questions keep with the URL working.

See: https://novonegocio.com.br/respostas/procuro-trabalho-em-casa

I tried adding a 301 htaccess redirect, like bellow:

Redirect 301 "/respostas/1002/lavar-alugar-toalhas-esterilizadas-abrir-firma-fiscal-boleto" "/respostas/"

But it redirect to other url with the "qa-rewrite=" in the midle, see...

"https://novonegocio.com.br/respostas/?qa-rewrite=1002/lavar-alugar-toalhas-esterilizadas-abrir-firma-fiscal-boleto"

This 301 redirect is very important to SEO.

May someone help me?

Thank you in advance.

2 Answers

+1 vote
by
selected by
 
Best answer

You'll have to write a custom plugin with a process module. In the process module add the the following function.

1. Create the file qa-plugin/redirect-plugin/qa-plugin.php with this content:

<?php

if (!defined('QA_VERSION')) { // don't allow this page to be requested directly from browser
    header('Location: ../../');
    exit;
}
qa_register_plugin_module('process', 'RedirectDeletedProcess.php', 'RedirectDeletedProcess', 'Redirect Deleted Process');

2. Create the file qa-plugin/redirect-plugin/RedirectDeletedProcess.php with this content:

<?php

class RedirectDeletedProcess {
    public function plugins_loaded()     {
        require_once QA_INCLUDE_DIR . 'app/page.php';

        $requestlower = strtolower(qa_request());
        $requestparts = qa_request_parts();
        $firstlower = strtolower($requestparts[0]);
        $routing = qa_page_routing();

        if (isset($routing[$requestlower])) {
            return;
        }

        if ($firstlower === 'user' && isset($requestparts[1])) {
            $account = qa_db_single_select(qa_db_user_account_selectspec($requestparts[1], false));
            if (!is_array($account)) {
                $this->redirectTo('users');
            }
        }

        if (!isset($routing[$firstlower . '/']) && is_numeric($requestparts[0])) {
            $question = qa_db_single_select(qa_db_full_post_selectspec(qa_get_logged_in_userid(), $requestparts[0]));
            if (!isset($question)) {
                $this->redirectTo('questions');
            }
        }
    }

    private function redirectTo($location)     {
        header("HTTP/1.1 301 Moved Permanently");
        qa_redirect($location);
    }
}

by
Updated my answer. If you need anything else, maybe it'd be better for it to be part of a different question
by
It worked perfectly! Thank you!

May you send me, by private message, your paypal e-mail?

Thanks!
by
Thanks! You can use this PayPal link: https://www.paypal.me/pupi1985 :)
by
Thanks Gabriel!
+1 vote
by
edited by
If you have permanently deleted content without intending to replace it with newer, related content, let the old URL return a 404 or 410. Currently Google treats 410s (Gone) the same as 404s (Not found). Returning a code other than 404 or 410 for a non-existent page (or redirecting users to another page, such as the homepage, instead of returning a 404) can be problematic. Such pages are called soft 404s, and can be confusing to both users and search engines.

https://support.google.com/webmasters/answer/2445990?hl=en
...