2009-08-26 5 views
3

Je pourrais utiliser de l'aide ici. J'utilise ceci pour réparer mon URL mais je n'arrive pas à comprendre comment enlever l'extension .php. L'URL ressemble à ceci maintenant: http://mydomain.com/page.php/foo/123/bar/456Supprimer l'extension .php avec PHP

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); 
    } 
} 

Toutes les idées?

/Tobias

+0

Vous essayez de créer ce que sont connus comme "Pretty URLs", et ils ont été discutés sur SO avant. [Cette réponse] (http://stackoverflow.com/questions/128796/pretty-urls-for-search-pages/128882#128882) devrait avoir ce que vous cherchez. – s4y

+0

Vous ne pouvez pas faire cela en utilisant PHP seul, vous devez creuser dans le module Apache mod_rewrite. –

Répondre

5

Si vous servez via Apache, vous aurez envie de regarder mod_rewrite.

En utilisant mod_rewrite, vous pouvez modifier la manière dont les URL sont mappées aux points d'extrémité réels de votre application. Pour votre exemple, vous voulez quelque chose comme ceci:

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

This page a d'autres exemples simples.

3

Vous avez probablement configuré votre serveur Web pour permettre à php de gérer toutes les demandes de fichiers ayant l'extension .php. Supposons que c'est un apache. Ensuite, il y a quelque chose comme

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

ou

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

dans l'un des fichiers de configuration. Le second indique à l'apache que tous les fichiers correspondant au masque .php $ doivent être gérés par le module/handler enregistré pour le type application/x-httpd-php (php).
Mais vous ne devez pas le limiter aux fichiers .php. Vous pouvez utiliser n'importe quel masque de fichier que vous voulez. Ou une autre directive comme par ex. <Directory>.
Si tous les fichiers dans un répertoire spécifique (et peut-être ses sous-répertoires) sont des scripts php vous pouvez même mettre un fichier .htaccess dans ce répertoire avec

ForceType application/x-httpd-php 

et l'apache traitera tout fichier en tant que script php. ForceType annule tous les paramètres de gestionnaire précédents.

2

Sous Apache, placez un fichier .htaccess dans le répertoire qui contient le fichier page.php.

Si les fichiers page.php contient dans le répertoire racine (c.-à-/page.php), puis ajoutez simplement dans votre .htaccess:

RewriteEngine On 
RewriteBase/

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

Si toutefois, les fichiers page.php contient en laisse dire /a_folder/another_folder/page.php

Ensuite, vous aurez besoin de mettre cela dans votre .htaccess:

RewriteEngine On 
RewriteBase/

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

Et ainsi de suite. Qu'est-ce que c'est, il supprime simplement page.php de l'URL. Donc, dans votre cas:

Au lieu de: http://mydomain.com/page.php/foo/123/bar/456 Vous pouvez utiliser: htp: //mydomain.com/foo/123/bar/456

Amusez-vous.

0

merci pour toutes les réponses mais si j'utilise mod_rewrite alors je dois faire de nouvelles règles (et beaucoup) chaque fois que je crée une nouvelle page. Et il y a beaucoup d'entre eux :)

Peut-être que si je rediriger tous les urls à mon index.php avec .htaccess puis fixer mon URL là, comme 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