mod-rewrite: Substituindo alguns caracteres em um url

3

É possível substituir algumas barras (/) de um URL por pontos (.) em um RewriteRule? Não precisa ser feito exclusivamente com um RewriteRule, mas definitivamente não com um script.

Exemplo 1:

INPUT:  /document/my/document.html
OUTPUT: /document-my.document.html

Exemplo 2:

INPUT:  /document/depth/of/path/can/vary.html
OUTPUT: /document-depth.of.path.can.vary.html
    
por Yuriy Nemtsov 14.03.2010 / 10:54

2 respostas

4

Acho que você poderia fazer isso usando uma abordagem iterativa. O "número variável de substituições" significa que você deve usar a mesma regra várias vezes, uma para cada "/" para substituir.

Tente isto:

RewriteRule ^/([^/]+)/(.*)$ /$1.$2 [N]

Alguns detalhes:

  • O padrão corresponde a / + nada + / + nada
  • Você precisa corresponder o primeiro / explicitamente, porque ele sempre estará lá e não deve ser substituído por .
  • O sinal [N] significa: Re-run the rewriting process (starting again with the first rewriting rule). This time, the URL to match is no longer the original URL, but rather the URL returned by the last rewriting rule. (da documentação do mod_rewrite do Apache )
por 14.03.2010 / 16:14
0

O que funcionou (graças à resposta de Jonathan Clarke):

RewriteCond %{REQUEST_URI} ^/document.*
RewriteRule ^/([^/]+)/(.*)$ /$1.$2 [N]
RewriteRule ^/document\.(.*)\.html /document-$1 [L]
    
por 15.03.2010 / 09:08