ti-enxame.com

Por que alguns URLs de site não incluem uma extensão de arquivo?

Eu estava navegando na internet e percebi que o YouTube, por exemplo, contém um URL como esse para denotar uma página de vídeo: http://www.youtube.com/watch?v=gwS1tGLB0vc.

Meu site usa um URL como este para uma página de tópico: http://www.example.com/page.php?topic_id=6f3246d0sdf42c2jb67abba60ce33d5cc.

A diferença é que, se você ainda não notou que no youtube, não há extensão de arquivo para sua página de exibição, por isso estou querendo saber, por que alguns sites não usam extensões de arquivo e qual o seu uso?

25
Scarface

As extensões de arquivo não são usadas por causa da idéia de que URIs (e, portanto, URLs) devem ser independentes da implementação - se você quiser acessar os endereços de George W. Bush, você deve poder ir para http: //www.whitehouse. gov/presidentes/georgewbush/endereços (por exemplo). Se os servidores da Casa Branca estão usando PHP ou Python ou Perl não importam para o usuário final, então eles não devem vê-lo. O usuário final não se importa com o modo como a página foi gerada, porque todos os idiomas da Web exibem o mesmo HTML, CSS e semelhantes, e eles estão apenas visualizando a página em seu navegador da web.

A maioria das estruturas da Web cria essa funcionalidade por padrão, precisamente por esse motivo, e pode ser realizada independentemente da regravação de URL na maioria dos servidores da web. Esse ideal é codificado no Guia de Estilo do W3C, que é sem dúvida um grande defensor dessa idéia que é amplamente aceito. É descrito em seu guia, "Cool URIs Don't Change" , que deve esclarecer as coisas se você ainda não entendeu completamente o raciocínio aqui. Esse documento é a declaração sobre o assunto e o padrão de fato para os frameworks.

Vale a pena notar que normalmente arquivos que acabam sendo baixados (e algumas vezes arquivos de dados usados ​​em AJAX) ainda terão suas extensões de arquivo intactas - http://example.com/song.mp3 ou http://example.com/whitepaper.pdf - porque eles devem ser salvos no computador do usuário final, onde as extensões de arquivo são importantes. As extensões não são incluídas para páginas que são simplesmente exibidas - que é a maioria das páginas.

34
cincodenada

O que você está vendo é um exemplo de roteamento de URL. Em vez de apontar para um arquivo específico (por exemplo, page.php), o servidor está usando uma tabela de roteamento ou configuração que direciona a solicitação para um manipulador que realmente renderiza o html (ou qualquer outra coisa dependendo do tipo mime retornado). Se você perceber, o StackOverflow usa o mesmo mecanismo.

12
Pete Amundson

Ter ou não a extensão é irrelevante. O navegador atua no tipo MIME retornado pelo servidor, não em qualquer extensão usada na URL.

7
Ignacio Vazquez-Abrams

Quando você pergunta "Por quê?" você está pedindo uma razão técnica ou uma razão de design? Algumas pessoas já responderam o técnico, então vou comentar sobre o design.

Basicamente, resume-se a essa URL é um ponto final. É um lugar que os usuários/serviços precisam acessar. A extensão é irrelevante na maioria dos casos. Se um usuário estiver navegando na Web e acessar http://site.com/users ele está esperando uma lista de usuários. Ele não se importa que não diga .html ou .php. E como designer usando essas extensões não faz muito sentido. Você quer que seu aplicativo faça sentido, e essas extensões não estão realmente fornecendo informações que o usuário precisa.

Os horários em que você gostaria de usá-los eram se estivesse criando um serviço que outros aplicativos usariam. Em seguida, você pode optar por usar uma extensão para denotar o tipo de dados que pode ser esperado (.json, .xml, etc). Há pessoas trabalhando em diretrizes de design e especificações para essas coisas, mas está tudo adiantado

Basicamente, essas extensões são usadas porque é assim que os servidores/servidores da Web funcionam por padrão. À medida que o desenvolvimento da web amadureceu, começamos a tratar os URLs de forma mais profissional e tentamos fazer com que eles fizessem sentido para as pessoas que os liam/usavam.

6
Nathan Hess

Embora as extensões não importem para o navegador, que usa apenas os cabeçalhos transmitidos a ele para determinar o que exibir e como exibi-lo, provavelmente eles do matter no servidor. Por exemplo, sua caixa pode ter um interpretador de PHP e um interpretador de Ruby instalado, mas seu servidor da Web tem arquivos de configuração para mapear extensões de arquivo para tipos MIME. Por exemplo, do php5.conf do Apache:

  AddType application/x-httpd-php .php .phtml .php3

que informa ao Apache que os arquivos que terminam em .php, .phtml e .php3 devem ser reconhecidos como sendo arquivos PHP.

No entanto, como as extensões não significam nada para o cliente, as URLs geralmente parecem "mais agradáveis" sem elas. Para fazer isso, tecnologias como Apache's mod_rewrite podem ser usadas para "reescrever" URLs de clientes para ter significado no servidor.

Por exemplo, você pode configurar as regras mod_rewrite para reescrever uma URL como http://yourblog.com/article/the-article-you-wrote (que parece mais agradável e mais simples de digitar e lembrar) para http://yourblog.com/articles.php?title=the-article-you-wrote, que o Apache pode usar para rotear a requisição para o script PHP.

5
Daniel Vandersluis

A URL deve ser considerada parte da interface do usuário. Como tal, deve ser projetado para transmitir informações sobre onde o usuário está no site e a estrutura do site.

Uma URL como:

mysite.com/sport/soccer/brazil_wins_worldcup

informa ao usuário muito sobre a estrutura do site e onde ele está atualmente. Em contraste:

mysite.com/article.php?cateogry=12&articleid=371 

é inútil, em vez disso, expõe detalhes de implementação irrelevantes, como qual linguagem é usada para criar o site e qual é o id desse artigo (provavelmente armazenado em um banco de dados sob esse id)

Além desse argumento estético (não exponha o usuário a detalhes de implementação irrelevantes), ele também ajuda a tornar o site à prova de futuro. Porque se você nunca expôs sua linguagem de escolha para começar, você pode atualizar posteriormente para Ruby ou Python, sem cada link no mundo que aponta para você, agora sendo um 404.

Crie URLs para fazer sentido para os usuários, e para ser à prova do futuro.

2
Agrajag

A chave é o campo Content-Type do cabeçalho de resposta HTTP. Algo parecido:

HTTP 200 OK
Content-Type: video/flv
Content-Length: 102345

DATA-DATA-DATA-DATA-DATA-DATA-....

Veja também:

Content-Disposition: attachment; filename=genome.jpeg;
     modification-date="Wed, 12 Feb 1997 16:29:51 -0500";

Mais detalhes: http://en.wikipedia.org/wiki/MIME

2
Notinlist

Bem, as extensões de arquivo não são de uso na internet. O navegador não se importa com a extensão do arquivo. Você poderia servir um arquivo CSS como .avi. Então, por que não simplesmente deixar de fora? Isso permite URLs mais curtos.

Além disso, "reescrever" uma URL permite URLs mais legíveis. Você pode não entender /categories.php?id=455, mas você /455-some-category.

Se você quiser fazer isso sozinho e estiver usando o Apache, dê uma olhada no mod_rewrite.

2
NikiC

Existem muitas respostas possíveis para isso. É como os servidores de aplicativos da web são configurados, resultando no que seu navegador da Web está interpretando. Pode haver situações em que você está usando reescrita ou roteamento de URL e, como outros disseram, quais manipuladores estão sendo fornecidos para URLs ou extensões solicitados.

Eu poderia ter um URL como " http://cory.com/this/really/doesnt/exist " e ele realmente estar apontando para " http://cory.com/this. does.exist.123 "se eu quisesse.

1
Cᴏʀʏ

O comportamento normal de um servidor da Web é mapear o caminho do URI solicitado em um arquivo em algum lugar no diretório raiz do documento. Então http://example.com/foo/bar é simplesmente mapeado para /path/do/document/root/foo/bar. Além disso, o servidor da Web precisa saber como manipular um arquivo. Isso geralmente é feito pela extensão de nome de arquivo. Portanto, arquivos com a extensão de nome de arquivo .php são manipulados pelo interpretador PHP.

Agora, além desse comportamento normal, a maioria dos servidores da Web tem recursos que permitem alterar o mapeamento (por exemplo, reescrita de URL ) e a maneira como um arquivo sem extensão de nome de arquivo é tratado.

No caso do servidor web Apache, o primeiro pode ser feito com mod_rewrite :

RewriteEngine on
RewriteRule ^/watch$ /watch.php

E o último pode ser feito com mod_mime :

<File watch>
    ForceType application/x-httpd-php
</File>

(Ok, na verdade isso não é um recurso mod_mime, mas um recurso core .)

1
Gumbo

Regra: extensões de arquivo não devem ser incluídas em URIs

Na Web, o caractere de ponto (.) É comumente usado para separar o nome do arquivo e as partes de extensão De um URI. Uma API REST não deve incluir extensões de arquivos artificiais Em URIs para indicar o formato do corpo de entidade de uma mensagem. Em vez disso, eles devem confiar no Tipo de mídia, conforme comunicado por meio do cabeçalho Content-Type, para determinar como Processar o conteúdo do corpo. 

(1) http://api.college.restapi.org/students/3248234/transcripts/2005/fall.json (2) http: //api.college.restapi. org/alunos/3248234/transcrições/2005/fall

(1) As extensões de arquivo não devem ser usadas para indicar a preferência de formato. (2) Os clientes da API REST devem ser encorajados a utilizar o mecanismo de seleção de formato fornecido pelo HTTP , O cabeçalho da solicitação Accept. referências: design REST livro de regras api 

0
Praveen_Shukla

abaixo dele o que eu uso no meu .htaccess para fazer a url ainda rodar corretamente sem a extensão HTML ou PHP.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f

significa que se o arquivo com o nome especificado no navegador não corresponder ao diretório (-d) ou aos arquivos (-f) em seu servidor da Web, regravar a regra abaixo

RewriteRule ^(.*)$ $1.html

eu não tenho certeza como o trabalho abaixo, mas eu acho que depois de reescrever com html e se ainda não coincidir com isso, em seguida, reescrever com php

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

se ainda não coincidir, será mostrada a página 404.

você também pode redirecionar 404 com o código abaixo em .htaccess

ErrorDocument 404 /404.html

importância é o código está trabalhando para o meu site.

http://mintnet.net/services

http://php.mintnet.net/home

esses não precisam da extensão do arquivo.

0
Võ Minh