How many bytes have you allocated to pathcopy? How many bytes are you trying to stuff in it? (Ditto pathcopy2). Once you fix that, make sure newpath is sized properly.
Also here's more trouble your way:
char* newpath = malloc(sizeof(pathcopy)); You say: give me a char pointer to a chunk of memory the size of pathcopy (which, by the way, isn't really enough, because of the char* secret sauce)
newpath = pathcopy; Here you say, oh never mind, point me to the memory that pathcopy owns. As you did with pathcopy earlier in the function, you have to populate the contents of newpath.
Some observations you might consider to make your code smaller and more elegant (and smaller means less to debug :)
strcpy and strcat will take a string literal, so
strcat(something,"index.php") will accomplish the same thing as declaring a variable and setting it to "index.php". That'd save some lines of code and some memory.
if you made your pathcopy a string (char* allocated to an appropriate size) instead of a char array, you could eliminate the need for newptr.
Since the program is an either/or, consider using one variable instead of two for your "searchpath" result.
Since the other tests pass server2, your load and parse functions are probably ok. Examine your lookup function for a typo or a missing block to troubleshoot the favicon.ico error.