Pergunta

Eu estou usando mod reescrever para acessar meus arquivos PHP no diretório raiz do meu site indiretamente. Atualmente, eu tenho algo parecido com isto,

RewriteRule ^(blog|about|page3|etc)$ /$1.php [L]

Mas o que eu gostaria de usar é

RewriteRule ^(.*)$ /$1.php [L]

Assim que eu não teria que atualizar meu arquivo .htaccess sempre que eu quero adicionar uma nova página ao meu site. O problema com isso, porém, é que ela afeta meus subdiretórios também. O que torna CSS, JavaScript, imagens unaccessable porque ele redireciona para "/dir/example.png.php".

Então, qual é a melhor solução aqui?

Foi útil?

Solução

Tente esta regra:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule .* $0.php [L]

Outras dicas

Edite o .htaccess a esta:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /$1.php [L]

Depois de iniciar o mecanismo de reescrita, ele irá primeiro verificar para ver se o arquivo solicitado é um arquivo real no sistema, ou se ele é realmente um diretório. Se for nenhum desses, ele executará a regra, que neste caso é tentar encontrar o arquivo anexando .php e servindo isso.

Subdirectories, imagens, CSS e similares vai ficar bem, porque eles vão sair do reescrever uma vez que eles são encontrados.

Eu faria isso com filtros para ignorar sub-diretórios. Dessa forma, você só tem que mudá-lo se você adicionar uma pasta sub. Você vai precisar adicionar uma linha como Sosh é se você tem imagens ou outros arquivos na pasta

O seguinte seria ignorar "imagens" e "js" sub pastas e tudo o redirecionamento outra

RewriteRule   ^images*   -  [L]
RewriteRule   ^js*       -  [L]
RewriteRule   ^(.*)$     /$1.php   [L]

Algo como isto (note a!):

RewriteRule !\.(js|ico|gif|jpg|png|css|zip|gz|html|xml)$ index.php
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top