If I'm not mistaken, the first webserver simply served all files and directories in a certain local directory (WWWROOT) in the identical hierarchy at a certain domain. This is in line how e.g. an FTP server acts. By contrast, nowadays many websites typically use generated pages served at arbitrary, well-designed points at the directory hierarchy below the domain.
When was the first time that the hierarchy presented by the webserver was virtualized like that?
Edit: I'm not talking so much about dynamically created content. CGI is indeed very old, but it used to be an actual files sitting in an actual location below WWWROOT and you would "call" it by adding that relative location to the domain the webserver was serving.
I'm more talking about the kind of URL schemes that e.g. Django talks about here: https://docs.djangoproject.com/en/3.0/topics/http/urls/ : As a part of setting up a website, you think of a URL scheme such that it is easily readable and then the webserver will server the files accordingly. They typically have nothing at all to do with files in a webroot.
As an example, take the URL that is currently displayed in my browser: https://retrocomputing.stackexchange.com/posts/15162/edit Is there somewhere a "15162" directory, containing a "edit" directory, containing an "index.html"? Most probably not. There probably isn't even a "posts" directory and all contents comes from a database, the pages being dynamically created.
That is great and gives you a high degree of flexibility, but that could only come about after someone realized: "Hey, I know www.domain.net/dir/file.html currently always serves $WWWROOT/dir/file.html, but in the end it is just a request to which a program (the webserver) needs to give a response which might, but need to be a verbatim copy of a file on disk." I'm referring to that idea of solving the problem right at the core, the webserver, and not by placeing a CGI script or Java applet somewhere in the directory structure below the webroot and then serving that in a special way.