Using WordPress ‘got_url_rewrite()’ PHP function

The got_url_rewrite() WordPress PHP function determines if the server supports URL rewriting.

Usage

$has_rewrite = got_url_rewrite();

Parameters

  • None

More information

See WordPress Developer Resources: got_url_rewrite()

Examples

Redirect non-www to www URLs

Check if URL rewriting is available before redirecting non-www URLs to their www counterparts.

if (got_url_rewrite()) {
    add_action('init', 'redirect_nonwww_to_www');
}

function redirect_nonwww_to_www() {
    if (strpos($_SERVER['HTTP_HOST'], 'www.') === false) {
        wp_redirect('https://www.' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301);
        exit;
    }
}

Add custom rewrite rules

Add custom rewrite rules for a custom post type if URL rewriting is supported.

if (got_url_rewrite()) {
    add_action('init', 'add_custom_rewrite_rules');
}

function add_custom_rewrite_rules() {
    add_rewrite_rule('^custom_post_type/([a-zA-Z0-9]+)/?', 'index.php?custom_post_type=$matches[1]', 'top');
}

Show a notice if URL rewriting is not supported

Inform the user if URL rewriting is not available on their server.

add_action('admin_notices', 'check_url_rewrite_support');

function check_url_rewrite_support() {
    if (!got_url_rewrite()) {
        echo '<div class="notice notice-error is-dismissible"><p>URL rewriting is not supported on your server. Please contact your hosting provider.</p></div>';
    }
}

Disable a plugin if URL rewriting is not supported

Deactivate a plugin that relies on URL rewriting if it’s not available.

add_action('admin_init', 'deactivate_plugin_if_no_rewrite');

function deactivate_plugin_if_no_rewrite() {
    if (!got_url_rewrite()) {
        deactivate_plugins('your-plugin/your-plugin.php');
        wp_die('The plugin "Your Plugin" has been deactivated because URL rewriting is not supported on your server.');
    }
}

Choose the appropriate sitemap URL structure

Generate sitemap URLs based on whether the server supports URL rewriting.

function get_sitemap_url($post_id) {
    if (got_url_rewrite()) {
        return home_url('/sitemap-' . $post_id . '.xml');
    } else {
        return home_url('/?sitemap=' . $post_id);
    }
}