Precisa de ajuda com um regravador de URL .htaccess

1

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

Eu preciso das seguintes regras para aplicar:

  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 1).
  3. Todas as regras devem ser aplicadas apenas em alguns diretórios e não em seus subdiretórios (/ e / framework até o momento).
  4. O htaccess deve enviar a URL digitada em um valor GET para que eu possa trabalhar com ela em PHP.

Qualquer assistente de regravação de mods pode me ajudar?

Editar:

OK depois de ler os posts sugeridos, eu criei isso, mas acho que está preso em um loop ... Qualquer um 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>

Desde que eu quero completar isso durante meus feriados de Natal, estou adicionando uma recompensa :) Obrigado por sua ajuda e boas festas!

    
por AlexV 21.12.2010 / 20:14

1 resposta

4

Tente isso como um 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 parâmetro uri GET estiver definido (caso contrário, você obterá um loop ao redirecionar para o script de destino depois de anexar o parâmetro uri )
  2. Se o URI contiver um . , ignore este conjunto de regras (talvez você queira 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. Redirecionar para index.php (talvez seja necessário alterar o destino) e definir o parâmetro uri GET

Segundo conjunto de regras:

  1. Se o parâmetro uri estiver definido, ignore este conjunto de regras para evitar um loop
  2. Continue se o URI solicitado terminar em .php , .php4 ou semelhante ( .php123 não seria redirecionado)
  3. Redirecionar para index.php (talvez seja necessário alterar o destino) e definir o parâmetro uri GET

Não é necessário um "assistente" para colocar as regras do mod_rewrite juntas - passe algum tempo experimentando você mesmo e lendo o guia que o jscott recomendou.

Faça faça todas as suas perguntas do tipo teoria aqui, se quiser grandes explicações (em oposição a perguntas do tipo prático, em que parece que os respondentes estão obtendo o seu projeto em vez de aprofundar seu conhecimento ).

    
por 24.12.2010 / 13:46