If you prefer more control in coding, you may use
- request hook – test the WordPress query after it is being setup
- preg_match() – match
/product/
keyword - url_to_postid() – test if product url exists
to build a checking when WordPress query is being setup
. The advantage of code against .htaccess is that it is relatively server independent such as server migration, site migration and so on.
The following code is placed in theme functions.php and proved to work in a testing site.
add_filter( 'request', 'ws365986_check_request' );
function ws365986_check_request( $query ) {
// var_dump($_SERVER['REQUEST_URI']); // for debug
// only check for product url if /product/ is found in URL
if( isset( $_SERVER['REQUEST_URI'] ) && preg_match( '/\/product\//', $_SERVER['REQUEST_URI'], $matches ) ) {
// check if url product exist
if( empty( url_to_postid( $_SERVER['REQUEST_URI'] ) ) ) {
// redirect if return is 0 (empty)
$url = home_url( '/sample-page' );
// wp_redirect( $url ); // because $url is prepared by internally, wp_redirect should be enough
wp_safe_redirect( $url );
exit(); // exit script after redirect
}
}
// default
return $query;
}