Remover extensão .php com PHP

votos
3

Eu poderia usar alguma ajuda aqui. Estou usando este para corrigir o meu URL mas eu não consigo descobrir como remover a extensão .php. O URL parece com isso agora: http://mydomain.com/page.php/foo/123/bar/456

function decode_URL_parameters() {
   $path = @$_SERVER['PATH_INFO'];
   $url_array=explode('/',$path);

   array_shift($url_array);

   while ($url_array) {
      $_GET[$url_array[0]] = $url_array[1];
      array_shift($url_array);
      array_shift($url_array);
   }
}

Alguma ideia?

/ Tobias

Publicado 26/08/2009 em 22:47
fonte usuário
Em outras línguas...                            


4 respostas

votos
5

Se você está servindo via Apache, você vai querer olhar mod_rewrite.

Usando mod_rewrite, você pode modificar a forma como URLs são mapeadas para pontos finais reais de sua aplicação. Para o seu exemplo, você vai querer algo como isto:

RewriteEngine on 
RewriteRule ^/?page/(.*)$ page.php/$1 [L]

Esta página tem alguns outros exemplos simples.

Respondeu 26/08/2009 em 23:02
fonte usuário

votos
3

Você provavelmente configurado seu servidor para deixar php lidar com todos os pedidos de arquivos com a extensão .php. Vamos supor que é um apache. Então há algo como

AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml .phpt

ou

<FilesMatch \.php$>
  SetHandler application/x-httpd-php
</FilesMatch>

em um dos arquivos de configuração. O segundo diz o apache que todos os arquivos que correspondem a máscara .php $ devem ser manipulados pelo módulo / manipulador que registrado para o tipo application / x-httpd-php (php).
Mas você não precisa se limitar a .php arquivos. Você pode usar qualquer máscara de arquivo que você deseja. Ou de outra directiva, como por exemplo <Directory> .
Se todos os arquivos em um diretório específico (e talvez seus subdiretórios) são scripts PHP, você pode até mesmo colocar um arquivo .htaccess no diretório com

ForceType application/x-httpd-php

eo apache irá tratar qualquer arquivo como script php. ForceType substitui as configurações de manipulador anteriores.

Respondeu 26/08/2009 em 23:18
fonte usuário

votos
2

Sob Apache, coloque um arquivo .htaccess no diretório que contém o arquivo page.php.

Se os arquivos page.php contém no diretório raiz (ou seja /page.php), em seguida, basta adicionar isso no seu .htaccess:

RewriteEngine On
RewriteBase /

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

Se, no entanto, os arquivos page.php contém em digamos /a_folder/another_folder/page.php

Então você terá que colocar isso em seu .htaccess:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /a_folder/another_folder/page.php?/$1 [L]

E assim por diante.

O que faz isto é, ele simplesmente remove page.php do URL. Assim, no seu caso:

Em vez de: http://mydomain.com/page.php/foo/123/bar/456 Você pode usar: htp: //mydomain.com/foo/123/bar/456

Diverta-se.

Respondeu 26/08/2009 em 23:26
fonte usuário

votos
0

obrigado por todas as respostas, mas se eu usar mod_rewrite então eu Haft para fazer novas regras cada vez (e muitos) eu criar uma nova página. E há muitos deles :)

Talvez se eu redirecionar todos os urls ao meu index.php com .htaccess e, em seguida, corrigir o meu URL lá, como wordpress:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Respondeu 27/08/2009 em 00:17
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more