Precisa de ajuda com um reescritor de URL .htaccess

Precisa de ajuda com um reescritor de URL .htaccess

Estou tentando fazer outro sistema SEO com PHP/.htaccess...

Preciso que as seguintes regras sejam aplicadas:

  1. 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).
  2. Deve capturar todos os URLs que terminam com .php* (.php, .php4...) (que são as exceções à regra nº 1).
  3. Todas as regras devem ser aplicadas apenas em alguns diretórios enãoem seus subdiretórios (/ e /framework até agora).
  4. 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:

  1. Não execute esta regra se o uriparâmetro GET estiver definido (caso contrário, você receberá um loop ao redirecionar para o script de destino após anexar o uriparâmetro)
  2. 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)
  3. Se o URI estiver em um diretório restrito, ignore este conjunto de regras
  4. Redirecione para index.php(talvez seja necessário alterar o destino) e defina o uriparâmetro GET

Segundo conjunto de regras:

  1. Se o uriparâmetro estiver definido, ignore este conjunto de regras para evitar um loop
  2. Prossiga se o URI solicitado terminar em .php, .php4ou similar ( .php123serianãoser redirecionado)
  3. Redirecione para index.php(talvez seja necessário alterar o destino) e defina o uriparâ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).

informação relacionada