Removendo a extensão de arquivo .php com o arquivo .htaccess

Quero que www.example.com/https://stackoverflow.com/questions/10462799/removing-php-file-extension-with-htaccess-file/about.php seja apenas www.example.com/about

Eu criei um arquivo .htaccess e coloquei na raiz do meu servidor. Eu estou usando hospedagem compartilhada linux. Versão do PHP 5.2

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php 

Parece que esse código deve funcionar corretamente, mas por algum motivo isso não acontece. Eu recebo um erro 404 quando tento navegar para uma página sem a extensão .php.

Aqui está minha marcação também:

  

Você pode ver que eu tentei usar a extensão php no link e também tentei sem. Os links com a extensão php vão para a página, mas não removem a extensão.

Eu fiz um teste para ver se module_rewrite estava habilitado colocando algum lixo e retornando um erro 500.

Use este código para ocultar / remover a extensão .php :

 Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / ## hide .php extension # To externally redirect /dir/foo.php to /dir/foo RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1 [R,L,NC] ## To internally redirect /dir/foo to /dir/foo.php RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_URI}.php [L] 

Então, depois de uma longa luta com o google eu finalmente percebi isso. Isso funciona com a hospedagem compartilhada do Godaddy. Ele remove as extensões de arquivo do php, de modo que http://seusite.com.br/about.php se torna http://seusite.com/about

 Options -MultiViews RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f #If requested is not a filename... RewriteCond %{REQUEST_FILENAME} !-d #And not a directory RewriteRule ^(.*)$ $1.php [L] # perform this redirect 

(remover comentários antes de fazer o upload para o servidor)

Eu tive esse problema também, mas descobri que isso parecia corrigir o problema do GoDaddy .htaccess.

 # Fix Rewrite Options -Multiviews # Mod Rewrite Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php 

Colado acima de tudo no meu arquivo .htaccess funcionou para mim …

 ## 301 Redirects RewriteCond %{QUERY_STRING} ^$ RewriteRule ^(.*)\.asp$ $1? [R=301,NE,NC,L] 

Sua regra de reescrita não está correta, é o caminho errado. Tente isso:

 RewriteRule ^(.*).php$ /$1 [L,R=301]