Eu tenho um URL que se parece com:
url.com/picture.php?id=51
Como eu converteria esse URL para:
picture.php/Some-text-goes-here/51
Eu acho que o WordPress faz o mesmo.
Como faço para criar URLs amigáveis em PHP?
php
.htaccess
url
mod-rewrite
url-rewriting
Jazerix
fonte
fonte
mod_rewrite
é tudo o que você precisa para isso e há muitas perguntas sobre isso aqui no SO. E se você "pensa" que o wordpress faz o mesmo, por que você simplesmente não procura ? ;)Respostas:
Você pode essencialmente fazer isso de duas maneiras:
A rota .htaccess com mod_rewrite
Adicione um arquivo chamado
.htaccess
na sua pasta raiz e adicione algo como isto:Isso instruirá o Apache a ativar o mod_rewrite para esta pasta e, se for solicitado um URL correspondente à expressão regular, ele será reescrito internamente com o que você deseja, sem que o usuário final o veja. Fácil, mas inflexível, portanto, se você precisar de mais energia:
A rota PHP
Coloque o seguinte em seu .htaccess: (observe a barra inicial)
Isso solicitará que você execute o
index.php
arquivo para todos os arquivos que normalmente não podem ser encontrados no seu site. Lá você pode, por exemplo:É assim que sites grandes e sistemas CMS o fazem, porque permite muito mais flexibilidade na análise de URLs, URLs dependentes de configuração e banco de dados, etc. Para uso esporádico, as regras de reescrita codificadas permanecem
.htaccess
bem.fonte
picture.php/invalid-text/51
também redirecionaria para o mesmo local. Você também pode adicionar uma verificação para ver se a sequência está correta e, se não, redirecionar novamente para o local correto. Foi assim que fiz em um dos meus sites usando o htaccess./blog/25
tanto quanto/picture/51
e/download/684
. Além disso, é considerado uma prática muito ruim (e você fica Google PR penalizado!) Se não todos URLs gerados aleatoriamente retornar corretamente 404.FallbackResource /index.php
(note a barra à esquerda)FallbackResource
apenas entra em ação arquivos que realmente não existem no sistema de arquivos, daí o fallback . Portanto, se você tiver um arquivo/static/styles.css
e se referir a ele comohttp://mydomain.tld/static/styles.css
o código nunca é executado, faça-o funcionar conforme o esperado e com a intenção transparente.if($elements[0] === NULL)
, pois$elements
ainda retornará uma contagem de um, mesmo que esteja vazio.Se você quiser apenas alterar a rota para
picture.php
adicionar regras de reescrita.htaccess
, atenderá às suas necessidades, mas, se desejar reescrever a URL como no Wordpress, o PHP é o caminho. Aqui está um exemplo simples para começar.Estrutura de pastas
Existem dois arquivos que são necessários na pasta raiz
.htaccess
eindex.php
, e seria bom colocar o restante dos.php
arquivos em uma pasta separada, comoinc/
..htaccess
Este arquivo possui quatro diretivas:
RewriteEngine
- ativar o mecanismo de reescritaRewriteRule
- negar acesso a todos os arquivos dainc/
pasta, redirecionar qualquer chamada para essa pasta paraindex.php
RewriteCond
- permite acesso direto a todos os outros arquivos (como imagens, css ou scripts)RewriteRule
- redirecione qualquer outra coisa paraindex.php
index.php
Como agora tudo é redirecionado para index.php, será determinado se o URL está correto, todos os parâmetros estão presentes e se o tipo de parâmetro está correto.
Para testar o URL, precisamos ter um conjunto de regras e a melhor ferramenta para isso é uma expressão regular. Usando expressões regulares, mataremos duas moscas com um golpe. Url, para passar neste teste deve ter todos os parâmetros necessários testados em caracteres permitidos. Aqui estão alguns exemplos de regras.
O próximo passo é preparar a solicitação uri.
Agora que temos o pedido uri, a etapa final é testar o uri nas regras de expressão regular.
Uma correspondência bem-sucedida, como usamos subpadrões nomeados em regex, preencherá a
$params
matriz quase da mesma forma que o PHP preenche a$_GET
matriz. No entanto, ao usar um URL dinâmico, a$_GET
matriz é preenchida sem nenhuma verificação dos parâmetros.Essas poucas linhas de código e um conhecimento básico de expressões regulares são suficientes para começar a construir um sistema de roteamento sólido.
Fonte completa
fonte
este é um arquivo .htaccess que encaminha quase tudo para index.php
depende de você analisar $ _SERVER ["REQUEST_URI"] e encaminhar para picture.php ou qualquer outra coisa
fonte
FallbackResource
diretiva algumas versões principais atrás, que agora é a maneira preferida de implementar esse comportamento a um custo de desempenho mais baixo, pois não precisa iniciar todo o mecanismo de reescrita. Documentação aqui . Suas regras também são falhas porque você não faz referência a diretórios (!-d
) e todos os filtros de extensão são obsoletos --f
eles já devem ser capturados.PHP não é o que você está procurando, confira mod_rewrite
fonte
Embora já tenha respondido, e a intenção do autor é criar um aplicativo do tipo front controller, mas estou postando uma regra literal para o problema solicitado. se alguém com o mesmo problema.
Acima deve funcionar para o URL
picture.php/Some-text-goes-here/51
. sem usar o index.php como um aplicativo de redirecionamento.fonte