When a .mtl file is referenced from an .obj, we merge the filename against the url of the .obj we are reading. So the short answer is to put the .mtl file and all the textures it references in the same folder as the .obj, and make sure your server serves them all.
The .obj “standard” doesn’t specify how other files (.mtl, .jpg, .png, etc.) are resolved. Lots of modeling systems have a “materials” library or search path, but of course, that’s not part of the .obj file. That’s why we do the above. By the way, it’s also not uncommon for some modeling systems to fail to define a .mtl library and material at all, and yet still expect that you pick up a texture of the same name as the .obj (but with .png or .jpg extension). So, in addition to the above, if the .obj specifies uv coordinates and yet does not specify a material, we will automatically look for -obj-filename-.jpg and -obj-filename.png in the same place.
Hope that helps!