As it is now, the only way I know of restricting the rebasing is to make it so that a unit has to be present at the location of the missile or squadron to pick it up. The choice is a range of 0 or inifinity.
In CIV4SpecialUnitInfos.xml the fighter and missile special unit types are where you'd change it to make them range 0, by changing bCityLoad from 0 to 1. This blocks loading onto units at a range, but still allows movement from city to city.
In BtS missiles have this set to 1 which is why your subs and missile cruisers have to go back to a city to get some loaded, but fighters have it set to 0 so they can go to an aircraft carrier anywhere on the map.
Note that changing this for squadrons would make it much harder to move a squadron onto a starbase - you'd have to carry it there with a carrier to transfer it, assuming you can do unit to unit transfers when that vlaue is set to 1 (I don't remember if missiles can be moved between units in BtS). Likewise moving the missiles off of a starbase (if you are not using the game option that turns off starbase missile production) has the same difficulty.
As far as I know adding a range to rebasing would require DLL work since I don't think there is any Python that is called that could change it (no "canRebase" callback that I can see).