Isso se deve a um equívoco com o que uma URL realmente é, provavelmente ajudada pelos dias de arquivos .HTML estáticos e scripts PHP.
Tradicionalmente, tudo que passou pelo TLD é um ponteiro para um arquivo específico. Digamos que uma postagem no blog esteja localizada em example.com/blog/2009/oct/18/what-have-we-come-to
. Sem o uso de técnicas sofisticadas, isso significaria que existe uma pasta chamada blog, e em que é uma pasta 2009
, e em que uma pasta para cada mês e nessas pastas outra pasta para todos os dias do mês. Claramente, isso fica muito complicado muito rapidamente.
É por isso que os servidores da Web (como o Apache) e as linguagens de programação (como o PHP) inventaram URL reescrita . O que isso faz é converter a referida URL em algo um pouco mais gerenciável, como example.com/blog/articles.php?id=423
. Aqui, o script articles.php
usará a ID de postagem fornecida para pesquisar a postagem aplicável e, em seguida, exibirá a postagem, mas o usuário ainda verá a URL como example.com/blog/2009/oct/18/what-have-we-come-to
.
Outra abordagem apenas resume tudo isso. Tudo além do TLD (neste caso, /questions/56772/website-url-hiding-hiding-file
) é meramente um ponteiro para conteúdo , não necessariamente um arquivo. Alguns sites, como Super User, são construídos usando uma abordagem MVC (Model-View-Controller). Geralmente, isso envolve uma lista de URLs para um site e os mapeia para as funções e códigos aplicáveis para exibir essa página. Por exemplo, o Superusuário pode se parecer com isso 1 :
'superuser.com/' > displayFrontPage()
'superuser.com/questions/' > displayQuestionsList(sorted=default)
'superuser.com/questions/<QuestionID>/<QuestionID>' > displayQuestion(question= QuestionID)
Isso geralmente seria colocado em um arquivo por si só. Eu tenho um layout comum:
superuser/
controller.aspx (which contains the list of URLs and points to a view in views.aspx)
views.aspx (which contains all the code for the superuser, such as displayFrontPage() and displayQuestion(question= QuestionID))
models.aspx (which contains information about the table in the database.)
1 Por favor, tenha em mente que eu não tenho idéia de como o controller funciona para o ASP MVC (eu sou mais do Django), então isso provavelmente não é tão preciso. É apenas um exemplo