ti-enxame.com

Como ocultar a extensão .php no .htaccess

Possível duplicado:
Remova a extensão .php com .htaccess

Estou tentando ocultar a extensão de arquivo .php, mas por algum motivo não consigo fazê-la funcionar. Minha última tentativa foi a seguinte:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule ^folder/([a-zA-Z_\-0-9]+)/?$ /folder/$1.php
</IfModule>

Eu tentei muitas variações diferentes de código que encontrei on-line, mas ainda sem sorte. O arquivo .htaccess é colocado no diretório raiz.

38
adamhuxtable

Eu usei isso:

RewriteEngine On

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]

veja também: esta pergunta

87
ryanve

A outra opção para usar PHP scripts sem extensão é

Options +MultiViews

Ou até mesmo seguindo os diretórios .htaccess:

DefaultType application/x-httpd-php

O último permite que todos os nomes de arquivos sem a extensão script sejam tratados como scripts PHP. Enquanto o MultiViews faz o servidor da web procurar alternativas, quando apenas o nome da base é fornecido (há um impacto no desempenho com isso).

14
mario

1) Tem certeza de que o módulo mod_rewrite está ativado? Marque phpinfo()

2) Sua regra acima pressupõe que o URL comece com "pasta". Isso está correto? Deseja realmente ter uma pasta na URL? Isso corresponderia a um URL como:

/folder/thing -> /folder/thing.php

Se você realmente quer

/thing -> /folder/thing.php

Você precisa soltar a pasta da expressão de correspondência.

Eu costumo usar isso para rotear a solicitação para a página sem php (mas a sua deve funcionar, o que me leva a pensar que o mod_rewrite pode não estar ativado):

RewriteRule ^([^/\.]+)/?$ $1.php  [L,QSA]

3) Supondo que você esteja declarando suas regras em um arquivo .htaccess, sua instalação permite definir a substituição de Opções (AllowOverride) nos arquivos .htaccess? Alguns hosts compartilhados não.

Quando o servidor encontra um arquivo .htaccess (conforme especificado por AccessFileName), ele precisa saber quais diretivas declaradas nesse arquivo podem substituir as informações de acesso anteriores.

6
typeoneerror