Como os sistemas MVC em que os URLs estão nessas formas forçam todas as solicitações por meio de um único arquivo index.php?
http://www.example.com/foo/bar/baz
http://www.example.com/goo/car/caz/SEO-friendly-name-of-the-object
http://www.example.com/hey/you
Edição: Quando tento reescrever as regras abaixo, recebo este erro:
[error] [client 127.0.0.1] Invalid URI in request GET / HTTP/1.1
[error] [client 127.0.0.1] Invalid URI in request GET /abc HTTP/1.1
EDIT: Ah, este é o conteúdo completo do /index.php. Quando removo as regras de reescrita, ela gera '/' ou '/index.php' ou recebo um 404 para qualquer outra coisa.
<?php
echo htmlspecialchars($_SERVER['REQUEST_URI']);
?>
RESOLVIDO: Adicionei um / na frente do index.php na regra de reescrita e funcionou:
RESOLVIDO NOVAMENTE: Acontece que o / era necessário apenas porque eu estava executando o 2.2.4. Quando atualizei para o 2.2.11, o / não era mais necessário.
apache-2.2
php
mod-rewrite
mvc
jmucchiello
fonte
fonte
Respostas:
Se você estiver usando o Apache, use reescritas via
mod_rewrite
:Isso reescreverá seus URLs para »index.php? Q = foo / bar / baz« de forma transparente.
As linhas 2. e 3. informam ao mecanismo de reescrita para não reescrever a URL se apontar para um arquivo ou diretório existente. É necessário ter acesso a arquivos reais fornecidos pelo servidor httpd.
fonte
O código abaixo usa o mod_rewrite do Apache para reescrever todos os URLs que não apontam para um arquivo ou diretório físico a ser mapeado para index.php. O resultado final será:
Regra de reescrita:
Explicação:
Ambas as linhas acima determinam que esta regra não se aplica a arquivos regulares (-f) ou diretórios (-d).
Mais informações sobre como criar regras mod_rewrite podem ser obtidas no site da Apache: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html .
fonte