WordPress.org

Ready to get started?Download WordPress

Forums

WordPress MU Domain Mapping
Domain mapping treats domains as case sensitive (5 posts)

  1. Chris M.
    Member
    Posted 2 years ago #

    In the function redirect_to_mapped_domain, the plugin performs the following check:

    if ( $url && $url != untrailingslashit( $protocol . $current_blog->domain . $current_blog->path ) )

    The issue is that if a user enters the domain in anything but lower case, that check will fail (MyDomain.com != mydomain.com), so the plugin will redirect (in this case it will redirect to MyDomain.com). That redirect will then start over, because browsers treat all domains as lower case.

    The two fixes I can think of would be either calling strtolower() on all domains as they're added to the database, or to use strcasecmp in the comparison. The latter might be a little safer, because I'm not 100% that all browsers translate the case of a domain. So the fix would be:

    if ( $url && 0 !== strcasecmp( $url, untrailingslashit( $protocol . $current_blog->domain . $current_blog->path ) ) )

    That way the domain works no matter how then user enters it.

    http://wordpress.org/extend/plugins/wordpress-mu-domain-mapping/

  2. Ron Rennick
    MultiSite Guru
    Plugin Author

    Posted 2 years ago #

    Domain names in the DNS system are case insensitive. There is no difference between MyDomain.com and mydomain.com.

    The Linux file system is case sensitive so a folder can contain both MyDomain.txt and mydomain.txt.

    To eliminate all sorts of potential problems with case sensitive conflicts in the filesystem used by almost all WP installs, WordPress networks use lowercase domain names only. Domain mapping follows suit.

  3. Chris M.
    Member
    Posted 2 years ago #

    That's the issue—the domain mapping plugin doesn't treat domains in a case insensitive way. If you look at the function domain_mapping_siteurl() (lines 529 and 536) you can see that it simply pulls the domain from the database as is, and in dm_domains_admin() it inserts the domain directly as it is sent from $_POST (lines 163 and 166). So if I enter "MyDomain.com" on the domain mapping admin page, it gets saved in the database as "MyDomain.com" — not "mydomain.com". Finally, if you look at redirect_to_mapped_domain() (line 707), you'll see that it simply checks if the domain in the database matches the domain in the $current_blog global variable. $current_blog->domain should always be lower case, but domain_mapping_siteurl() does not always return a lower case domain, so that check will always return false if the domain is not entered as all lower case in the admin panel.

    A better fix might be changing the dm_domains_admin() function so that it performs strtolower() on $_POST['domain'] before inserting it into the database.

  4. Chris M.
    Member
    Posted 2 years ago #

    It's worth noting that the second change does not fix the issue for anyone who already has a domain name in the system that's not all lower case—it might make sense to make both changes for the time-being (both strtolower() when inserting into the database, and strcasecmp() when comparing the domains).

  5. Ron Rennick
    MultiSite Guru
    Plugin Author

    Posted 2 years ago #

    It's worth noting that the second change does not fix the issue for anyone who already has a domain name in the system that's not all lower case

    There's nothing to prevent you from removing the maps you have that have uppercase letters in them and adding them as all lowercase letters. They aren't working in their current state.

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic