Pergunta

Agora eu estou fazendo algo parecido com isto:

RewriteRule ^/?logout(/)?$ logout.php
RewriteRule ^/?config(/)?$ config.php

Eu prefiro muito mais ter um regras que fazem a mesma coisa para cada url, então eu não tenho que continuar a acrescentar-lhes cada vez que eu adicionar um novo arquivo.

Além disso, eu gosto de combinar coisas como '/ config / novo' para 'config_new.php' se isso é possível. Eu estou supondo que alguns regexp me deixaria fazer isso?

Foi útil?

Solução

Tente:

RewriteRule ^ /? (\ W +) /? $ $ 1.php

$ 1 é o conteúdo da seqüência primeira capturado entre parênteses. Os colchetes em torno do segundo corte não são necessários.

edit: Para o outro jogo, tente o seguinte:

RewriteRule ^ /? (\ W +) / (\ w +) /? $ $ 1_ $ 2.php

Outras dicas

eu faria algo assim:

RewriteRule ^/?(logout|config|foo)/?$ $1.php
RewriteRule ^/?(logout|config|foo)/(new|edit|delete)$ $1_$2.php

Eu prefiro listar explicitamente a url é que eu quero para corresponder, para que eu não precisa se preocupar com conteúdo estático ou adicionando coisas novas posteriores que não precisam ser reescritos para arquivos PHP.

A descrição acima é ok se todos de sub url são válidos para todos os URL raiz (book/new, movie/new, user/new), mas não tão bom se você quer ter diferentes sub url do dependendo ação raiz (logout/new não faz muito sentido) . Você pode lidar com isso ou com um regex mais complexo, ou pelo encaminhamento tudo para um único arquivo php que irá determinar quais arquivos devem ser incluídos e exibição baseada na url.

Mod reescrever não pode fazer (potencialmente) substitui ilimitadas como você quer fazer na segunda parte da sua pergunta. Mas confira o motor de reconfiguração externa na parte inferior da Apache URL Guia do Reescrevendo :

Motor Rewriting Externa

Descrição:

Um FAQ: Como podemos resolver o foo / bar / quux / etc. problema? Parece não haver solução pelo uso de mod_rewrite ... Solução:

Use um RewriteMap externa ou seja, um programa

, que age como um RewriteMap. Ele é executado uma vez na inicialização do Apache recebe os URLs solicitados em STDIN e tem de colocar o (geralmente reescrita) URL em STDOUT resultante (mesma ordem!).

RewriteEngine on
RewriteMap    quux-map       prg:/path/to/map.quux.pl
RewriteRule   ^/~quux/(.*)$  /~quux/${quux-map:$1}

#!/path/to/perl

#   disable buffered I/O which would lead
#   to deadloops for the Apache server
$| = 1;

#   read URLs one per line from stdin and
#   generate substitution URL on stdout
while (<>) {
    s|^foo/|bar/|;
    print $_;
}

Este é um exemplo somente de demonstração e apenas reescreve todas as URLs / ~ quux / foo / ... de / ~ quux / bar / .... Na verdade, você pode programar o que quiser. Mas note que, enquanto tais mapas podem ser usados ??também por um usuário médio, apenas o administrador do sistema pode defini-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top