Apache mod_rewrite para após a primeira condição

1

Estou tentando reescrever este URL da seguinte forma:

  • fr.example.com/tag/movies » example.com/catch.php?country=fr&tag=movies
  • example.com/tag/movies » example.com/catch.php?tag=movies
  • fr.example.com » domain.com/catch.php?country=fr

para estes, eu tenho as seguintes regras mod_rewrite em um arquivo .htaccess

  • subdomínio + tag

    RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com [NC]
    RewriteRule ^tag/([^/]+) catch.php?country=%1&tag=$1 [L,NS]
    
  • tag

    RewriteRule ^tag/([^/]+) catch.php?tag=$1 [L,NS]
    
  • subdomínio

    RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com [NC]
    RewriteRule ^(.*)$ catch.php?country=%1 [L,NS]
    

exatamente nesta ordem.

Agora, o L após o primeiro RewriteRule deve terminar o processamento e redirecioná-lo para o subdomínio + URL do tag, mas isso não acontece. Por exemplo, fr.example.com/tag/movies é enviado para catch.php?country=fr , que é a última condição no arquivo .htaccess .

Ele não deve parar depois que o primeiro L for encontrado?

RESPOSTA

Bem, acontece que o [L] sinalizador funciona de forma diferente dependendo do contexto ( .htaccess / <Directory> diferente de httpd.conf ) como você pode ver aqui .

Portanto, para que funcione, basta colocar as regras dentro de <VirtualHost> (NÃO <Directory> ) e adicionar / a cada URI ( /catch.php , /tag , ...). É isso.

    
por Trident Splash 03.01.2010 / 21:57

1 resposta

1

O sinalizador L não para de processar em todas as circunstâncias. Sugiro que consulte este tópico na pilha Estouro, especialmente o link para o Apache Rewrite Guide, e também ligar o RewriteLog para que você possa confirmar como o mod_rewrite está processando suas regras.

    
por 03.01.2010 / 23:46