To "have" your shirt "on" is a phrasal verb, meaning to "wear" your shirt. If we actually say to "wear", then we don't use the word "on" (as it is not used as part of a phrasal verb with the verb to "wear"). When we use to "be on" in reference to your shirt, that is another phrasal ver similar to to "have... on".