如何在WordPress中使用HTAccess仅重定向404个页面

时间:2017-05-23 作者:Jurrt

对于一个客户,我想做以下事情。htaccess:

域名。com/path必须重定向到sub.domainname。com/path,但仅当第一页是已删除页/404页时。

因此,所有现有页面必须保持完整,删除的页面必须重定向到具有相同路径的子域。

我在Wordpress网站上使用了以下代码,仅将404个错误页面重定向到新域:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^ http://example.com%{REQUEST_URI} [L,R=301]
我已覆盖现有htaccess文件中的以下代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

它不起作用。问题是,现在所有页面都被重定向到新域。

只有404必须重定向。

我做错了什么?

谢谢

2 个回复
SO网友:cybmeta

据我所知。htaccess重写规则是在WordPress甚至PHP引擎处理请求之前执行的,因此您无法知道URL是否会在中触发404错误。htaccess,您无法检查给定路径是否会在该级别触发404。您需要在WordPress中进行:

// See https://developer.wordpress.org/reference/hooks/template_redirect/
add_action( \'template_redirect\', \'cyb_redirect_not_found_paths\' );
function cyb_redirect_not_found_paths() {

    // See https://developer.wordpress.org/reference/functions/is_404/
    if( is_404() ) {

        if( $_SERVER[\'REQUEST_URI\'] == \'/your_path\' ) {

            $url_to = \'redirecton_rul\';

            // See https://developer.wordpress.org/reference/functions/wp_redirect/
            wp_redirect( $url_to );
            exit;

        }

    }

}

SO网友:Farhad Sakhaei

使用此方向:

ErrorDocument 404 http://example.com/404/

结束

相关推荐

Permalinks - .htaccess

根据WordPress官方文档,当你保存永久链接时,它会更新你的。htaccess文件(https://codex.wordpress.org/Settings_Permalinks_Screen).然而,当我进行永久链接更改并保存它们时,我看不到任何更改。htaccess更新。有人能澄清一下WordPress文档是否不准确,或者我是否遗漏了什么。