Posso fazer um cálculo simples dentro de um RewriteRule?

4

Uma mudança na forma como um site é estruturado significa que os URLs precisam ser alterados de

site/11-foo/21-bar 

para

site/1-foo/1-bar

i.e. Eu quero usar um RewriteRule para subtrair uma constante (neste exemplo, 10) do inteiro no segundo argumento e outra constante (neste exemplo, 20) do inteiro no terceiro argumento.

Esses cálculos simples salvariam literalmente milhões de redirecionamentos 301 que precisariam ser manipulados. Existe alguma maneira de fazer isso usando o mod_rewrite?

    
por lazysoundsystem 04.08.2010 / 21:30

2 respostas

4

Não, mas você pode usar um RewriteMap e ter suas variáveis processadas por um programa externo:

link

MapType: prg, MapSource: Unix filesystem path to valid regular file

Here the source is a program, not a map file. To create it you can use a language of your choice, but the result has to be an executable program (either object-code or a script with the magic cookie trick '#!/path/to/interpreter' as the first line).

This program is started once, when the Apache server is started, and then communicates with the rewriting engine via its stdin and stdout file-handles. For each map-function lookup it will receive the key to lookup as a newline-terminated string on stdin. It then has to give back the looked-up value as a newline-terminated string on stdout or the four-character string ''NULL'' if it fails (i.e., there is no corresponding value for the given key). A trivial program which will implement a 1:1 map (i.e., key == value) could be:

#!/usr/bin/perl
$| = 1;
while (<STDIN>) {
    # ...put here any transformations or lookups...
    print $_;
}
    
por 04.08.2010 / 21:41
1

Não há nenhum cálculo dentro dele, link

Embora tenha agrupamento (contagem de ocorrências) e mapeamento, eu recomendo que você use uma correção global para um index.php principal e a partir daí crie a página que deve ser exibida pelos dados da requisição (get, post, cookie , etc), que é o que os grandes fóruns e mais CMS fazem (exemplos são, vbulletin, wordpress, ipb) ...

    
por 04.08.2010 / 21:50