Estou tentando fazer outro sistema SEO com PHP/.htaccess...
Preciso que as seguintes regras sejam aplicadas:
- Deve capturar todos os URLs que não terminam com uma extensão (www.foo.com --> catch | www.foo.com/catch-me --> catch | www.foo.com/dont-catch.me --> não pegue).
- Deve capturar todos os URLs que terminam com .php* (.php, .php4...) (que são as exceções à regra nº 1).
- Todas as regras devem ser aplicadas apenas em alguns diretórios enãoem seus subdiretórios (/ e /framework até agora).
- O htaccess deve enviar a URL digitada em um valor GET para que eu possa trabalhar com ela em PHP.
Qualquer assistente de reescrita de mod pode me ajudar?
Editar:
OK, depois de ler as postagens sugeridas, descobri isso, mas acho que está preso em um loop... Alguém pode ajudar?
<IfModule mod_rewrite.c>
RewriteEngine On
# 1
RewriteCond %{REQUEST_FILENAME} !\.[^/]+$ [OR]
# 2
RewriteCond %{REQUEST_FILENAME} \.php.*$
# 4
RewriteRule ^(.*)$ http://localhost/seo-urls/seo-urls-mapper.php%3Frequested=$1?%{QUERY_STRING}
</IfModule>
Como quero concluir isso durante as férias de Natal, estou adicionando uma recompensa :) Obrigado pela ajuda e boas festas!
Responder1
Tente isto como ponto de partida:
RewriteEngine On
RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI} !\.(.*)
RewriteCond %{REQUEST_URI} !^/(framework|restricted)/
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]
RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI} \.php.?$
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]
Primeiro conjunto de regras:
- Não execute esta regra se o
uri
parâmetro GET estiver definido (caso contrário, você receberá um loop ao redirecionar para o script de destino após anexar ouri
parâmetro) - Se o URI contiver um
.
, pule este conjunto de regras (você pode querer criar uma regra mais específica para extensões específicas, mas isso funciona) - Se o URI estiver em um diretório restrito, ignore este conjunto de regras
- Redirecione para
index.php
(talvez seja necessário alterar o destino) e defina ouri
parâmetro GET
Segundo conjunto de regras:
- Se o
uri
parâmetro estiver definido, ignore este conjunto de regras para evitar um loop - Prossiga se o URI solicitado terminar em
.php
,.php4
ou similar (.php123
serianãoser redirecionado) - Redirecione para
index.php
(talvez seja necessário alterar o destino) e defina ouri
parâmetro GET
Não é preciso ser um "assistente" para montar as regras do mod_rewrite - passe algum tempo experimentando por conta própria e lendo o guia recomendado por jscott.
Fazerfaça todas as suas perguntas do tipo teórico aqui se quiser ótimas explicações (em oposição às perguntas do tipo prático, nas quais parece que os respondentes estão colaborando com o seu projeto em vez de aprofundar o seu conhecimento).