Como eu faço o trabalho .htaccess no diretório atual e não subdiretórios?
-
05-07-2019 - |
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?
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 ??p>
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