1

For example this code

class My_Sitemap
{
    public static function install()
    {
        add_filter('rewrite_rules_array', array(__CLASS__, 'rewriteRules'), 1, 1);
        global $wp_rewrite;
        $wp_rewrite->flush_rules(false);
    }

    public static function rewriteRules($wpRules)
    {
        $rules = array(
            'sitemap\.xml$' => 'index.php?pagename=my-sitemap',
        );
        return array_merge($rules, $wpRules);
    }

    public static function parseRequest($wp)
    {
        if (!isset($wp->query_vars['pagename'])) {
            return true;
        }
        if ($wp->query_vars['pagename'] !== 'minimal-xml-sitemap') {
            return true;
        }
        self::outputXML();
    }

    public static function outputXML()
    {
        echo 'hello';
    }
}

register_activation_hook(__FILE__, array('My_Sitemap', 'install'));
add_action('parse_request', array('My_Sitemap', 'parseRequest'));

the rewrite rule is sitemap\.xml$, shouldn't it be ^sitemap\.xml$? If I go to mysite.com/asitemap.xml it doesn't work, but mysite.com/sitemap.xml works. Which one is correct?

2

I just did a test and it seems like the rewrite rules imply ^ if you do not specify it. In my test I found:

rule 'foo' matched url 'foo'
rule '^foo' matched url 'foo'
rule 'foo' did not match url 'afoo'
rule '^foo' did not much url 'afoo'
rule '.*foo' matched url 'afoo'

So i had to explicitly add some matching regex at the start for it to match extra characters at the start. 'foo' did not match 'afoo'

Personally, I like to be specific, so I think you're right it makes sense to make your regex '^sitemap\.xml$' because that's what it will do.

| improve this answer | |
  • I wonder if this is to make it easier to be able to move the WordPress site into a subdirectory or different URL path? If you explicitly include ^ in your rule and you later decide to move the site into a subdirectory then you will also need to update your rule. (?) In the docs, this Sample Rewrite Rule Array does not include the ^ start-of-string anchor on any rule? (The same behaviour does not appear to extend to $ end-of-string anchor.) – MrWhite Jul 5 at 23:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.