Перенаправить старые страницы со списком домашних IDX на страницу поиска

Мы получаем много 404 ошибок на веб-сайте недвижимости после того, как дома проданы, и объявление переходит в автономный режим. Я пытаюсь с помощью htaccess перенаправить недостающие страницы, которые Google Search Console отображает как 404, на страницу поиска с домашним списком. Я попробовал приведенный ниже код, но он перенаправляет все листинги, а не только те, которые больше не существуют. Не уверен, что это мой код или потому что страницы создаются динамически.

Все домашние списки находятся в www.example.com/homes-for-sale-details/[address]. Если список больше не существует, я хочу, чтобы страница была перенаправлена ​​на www.example.com/homes-for-sale-details.

Мой код доступа

# Redirect old home listing to a search page
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^homes-for-sale-details/(.*)$ https://www.example.com/homes-for-sale-details [L,NC,R=301]
</IfModule>

Куда я иду не так?

Большое спасибо!

Изменить (добавлено больше кода htaccess):

####################################
# START Redirect pages from old site
#
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^Properties https://www.example.com/home-listings [L,NC,NE,R=301]
    RewriteRule ^Access https://www.example.com/search-homes [L,NC,NE,R=301]
    RewriteRule ^Neighboorhoods https://www.example.com/neighborhoods [L,NC,NE,R=301]
    RewriteRule ^Buyer-Resources https://www.example.com/buy-home-in-colorado-springs [L,NC,NE,R=301]
    RewriteRule ^Relocation-Guide https://www.example.com/buy-home-in-colorado-springs/relocation-guide [L,NC,NE,R=301]
    RewriteRule ^Buyer-Resources/Buyer-Finance/Finance-Information https://www.example.com/buy-home-in-colorado-springs/home-finance [L,NC,NE,R=301]
    RewriteRule ^Seller-Resources https://www.example.com/sell-colorado-springs-home [L,NC,NE,R=301]
    RewriteRule ^Area-Schools https://www.example.com/local-lifestyle/area-schools [L,NC,NE,R=301]
    RewriteRule ^Colorado-Springs-Attractions https://www.example.com/local-lifestyle/colorado-springs-attractions [L,NC,NE,R=301]
    RewriteRule ^Military-Bases https://www.example.com/local-lifestyle/military-bases [L,NC,NE,R=301]
    RewriteRule ^About$ https://www.example.com/about-us [L,NC,NE,R=301]
    RewriteRule ^contact$ https://www.example.com/contact-us [L,NC,NE,R=301]
    RewriteRule ^Terms-Of-Service https://www.example.com/terms-of-service [L,NE,R=301]
    RewriteRule ^Privacy-Policy https://www.example.com/privacy-policy [L,NE,R=301]
    RewriteRule ^Site-Map https://www.example.com/sitemap [L,NC,NE,R=301]

    RewriteRule ^neighborhoods/fountain$ https://www.example.com/neighborhoods/fountain-security-widefield [L,NC,NE,R=301]
    RewriteRule ^neighborhoods/securitywidefield https://www.example.com/neighborhoods/fountain-security-widefield [L,NC,NE,R=301]
    RewriteRule ^park-avenue-properties-blog https://www.example.com/blog [L,NC,NE,R=301]
    RewriteRule ^Primary-Factors-the-Affect-the-Real-Estate-Market https://www.example.com/primary-factors-affect-real-estate-market [L,NC,NE,R=301]
</IfModule>
# END Redirect pages from old site

# Force HTTPS
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{SERVER_PORT} 80 
    RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
    RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
    RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
    RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
</IfModule>

# Remove "Blog" from blog post URLs and preserve blog paging
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} !page
    RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
    RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
    RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
    RewriteRule ^Blog/(.*)$ /$1 [L,NC,R=301]
</IfModule>

# Redirect old home listing to a search page
#<IfModule mod_rewrite.c>
#    RewriteEngine On
#    RewriteBase /
#    RewriteCond %{REQUEST_FILENAME} !-d
#    RewriteCond %{REQUEST_FILENAME} !-f
#    RewriteRule ^homes-for-sale-details/(.*)$ https://www.example.com/homes-for-sale-details [L,NC,R=301]
#</IfModule>

####################################
# Browser caching code removed :)
####################################

# 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

2 ответа

Решение

После неудачной попытки найти ответ на htaccess ответ Slim заставил меня задуматься, и я обнаружил этот пост Перенаправление шаблонов WordPress (большое спасибо за помощь Slim!!!)

Вот модификация, которую я сделал в этом коде.

// Redirect missing home listing to a search page.
function __404_template_redirect()
{
    if( is_404() )
    {
        $req = $_SERVER['REQUEST_URI'];

        if ( is_file( $req )) {
            return; // don't reduce perf by redirecting files
        }

        // check if "homes-for-sale-details" is in the URL
        if ( strpos($req, 'homes-for-sale-details') == false ) {
            return; // only redirect missing homes
        }

        // pull the parent directory and convert to site url
        $parent_url = get_permalink( 1232 );

        // redirect to parent directory
        wp_redirect( $parent_url, 301 );
        exit();
    }
}
add_action( 'template_redirect', '__404_template_redirect' );

Я пытался заставить это работать с файлом.htaccess и не смог. Проблема с вашим сценарием выше заключается в том, что вы сначала не проверяете ошибку 404, поэтому все запросы из этой "папки" перенаправляются. Я безуспешно пытался использовать директиву ErrorDocument в файле.htaccess, поэтому я решил использовать только то, что уже есть в Wordpress. В вашей подпапке тем (/wp-content/themes/THEMENAME) должен быть файл 404.php. Если его там нет, вы можете его создать. Вы можете использовать некоторый код в верхней части этого файла, чтобы проанализировать URL-адрес запроса и перенаправить страницу. Примерно так должно работать:

<?php 
    if (strpos($_SERVER['REQUEST_URI'], 'homes-for-sale-details') !== false)
         header('Location: /homes-for-sale-details', true, 301);
    else {
?>
    // ... paste the current 404.php content here
<?php } ?>

Просто не забудьте сделать резервную копию вашей текущей страницы 404.php на случай, если вы перезапишете что-то, что не хотели. Если вы хотите попытаться заставить это работать с компонентом ErrorDocument в htaccess, будьте моим гостем, но по какой-то причине это не сработало для меня. Вот пост, который показывает, как это сделать.

Удачи!

Другие вопросы по тегам