Mod-reescreve em apache: alterar todos os URLs
-
01-07-2019 - |
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?
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.