web-dev-qa-db-fra.com

Comment supprimer l'extension de fichier de l'adresse du site?

Je conçois un site web. Je veux que l'adresse de mon site ressemble à l'image suivante:

file name extensions like (PHP/JSP) are hidden

Je ne souhaite pas que mon site Web ressemble à http://something.com/profile.php Je souhaite que l'extension .php soit supprimée de la barre d'adresse à l'ouverture du site par quelqu'un En d'autres termes, je veux que mon site ressemble à: http://something.com/profile

Dans un deuxième exemple, vous pouvez consulter l'adresse du site Web StackOverflow. 

Quelqu'un peut-il m'aider s'il vous plaît à faire cela? Merci! 

51
Sumit Gupta

Ajoutez simplement le fichier .htaccess au dossier racine de votre site (par exemple, /home/domains/domain.com/htdocs/) avec le contenu suivant:

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

Tout d’abord, vérifiez que le module mod_rewrite est installé. Ensuite, veillez à comprendre comment cela fonctionne, beaucoup de gens l’obtiennent à l’arrière. 

Vous ne cachez pas les URL ou les extensions. Ce que vous faites est de créer une nouvelle URL qui dirige vers l'ancienne, par exemple 

L’URL à mettre sur votre site Web sera yoursite.com/play?m=asdf. 

ou mieux encore 

yoursite.com/asdf 

Même si le répertoire asdf n'existe pas. Ensuite, avec mod_rewrite installé, vous mettez ceci dans .htaccess. En gros, si l’URL demandée n’est ni un fichier ni un répertoire, dirigez-le vers mon script: 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /play.php [L] 

Vous avez presque terminé - il ne vous reste plus qu'à écrire des éléments dans votre script PHP pour analyser la nouvelle URL. Vous voulez faire cela pour que les ANCIENS fonctionnent aussi - vous maintenez un système dans lequel la variable est toujours exactement la mêmeOUcréez une table de base de données qui corrèle "l'URL conviviale pour le référencement" avec le produit id. Un exemple pourrait être 

/ Some-Cool-Video (qui correspond à l'ID du produit asdf) 

L'avantage de cela? Les moteurs de recherche indexeront les mots clés "Some Cool Video". asdf? Qui va chercher ça? 

Je ne peux pas vous donner de détails sur la façon de programmer ceci, mais prenez la chaîne de requête, enlevez la fin 

yoursite.com/Some-Cool-Video 

se transforme en "asdf" 

Puis définissez la variable m sur cette 

m = asdf 

Donc, les deux URL iront toujours au même produit 

yoursite.com/play.php?m=asdf 
yoursite.com/Some-Cool-Video 

mod_rewrite peut aussi faire beaucoup d'autres choses importantes, comme Google et l'activer sur votre serveur (il est probablement déjà installé).

12
Shiv Singh

Vous avez différents choix . L'un d'eux crée un dossier nommé "profil" et renommez votre "profil.php" en "default.php" et le place dans le dossier "profil" . à cette page de cette façon:

Ancienne page: http://something.com/profile.php?id=a&abc=1

Nouvelle page: http://something.com/profile/?id=a&abc=1

Si vous n'êtes pas satisfait, laissez un commentaire pour les méthodes compliquées.

4
Iman Hejazi

Le problème avec la création d’un répertoire et le maintien du fichier index.php est que

  1. vos liens avec le menu cesseront de fonctionner
  2. Il y aura beaucoup trop de répertoires. Par exemple, il y aura un répertoire séparé pour chaque question ici sur stackoverflow

Les solutions sont 1. MOD REWRITE (comme suggéré ci-dessus) 2. utilisez un code php pour inclure dynamiquement d'autres fichiers dans le fichier d'index. Lisez-en un peu plus ici http://inobscuro.com/tutorials/read/16/

2
Rahul Singh

Voici un moyen simple PHP que j'utilise.
Si une page est demandée avec l'extension .php, une nouvelle requête est effectuée sans l'extension .php. L'extension .php n'est alors plus affichée dans le champ d'adresse du navigateur. 

J'ai proposé cette solution car aucune des nombreuses suggestions .htaccess ne fonctionnait pour moi et il a été plus rapide de l'implémenter dans PHP que d'essayer de comprendre pourquoi le .htaccess ne fonctionnait pas sur mon serveur.

Placez ceci au début de chaque fichier PHP (de préférence avant toute autre chose):

include_once('scripts.php');  
strip_php_extension();  

Ensuite, mettez ces fonctions dans le fichier 'scripts.php':

//==== Strip .php extension from requested URI  
function strip_php_extension()  
{  
  $uri = $_SERVER['REQUEST_URI'];  
  $ext = substr(strrchr($uri, '.'), 1);  
  if ($ext == 'php')  
  {  
    $url = substr($uri, 0, strrpos($uri, '.'));  
    redirect($url);  
  }  
}  

//==== Redirect. Try PHP header redirect, then Java, then http redirect
function redirect($url)  
{  
  if (!headers_sent())  
  {  
    /* If headers not yet sent => do php redirect */  
    header('Location: '.$url);  
    exit;  
  }  
  else  
  {
    /* If headers already sent => do javaScript redirect */  
    echo '<script type="text/javascript">';  
    echo 'window.location.href="'.$url.'";';  
    echo '</script>';  

    /* If javaScript is disabled => do html redirect */  
    echo '<noscript>';  
    echo '<meta http-equiv="refresh" content="0; url='.$url.'" />';  
    echo '</noscript>';  
    exit;  
  }  
}  

Il est évident que vous devez toujours configurer Apache pour rediriger toute demande sans extension vers le fichier portant l'extension . La solution ci-dessus vérifie simplement si l'URI demandé possède une extension, s'il le fait, mais demande l'URI sans l'extension. Apache effectue ensuite la redirection vers le fichier portant l'extension, mais seul l'URI demandé (sans l'extension) apparaît dans le champ d'adresse du navigateur . L'avantage est que tous vos liens "href" dans votre code peuvent toujours avoir la nom de fichier complet, c'est-à-dire y compris l'extension .php.

2
Tony

Tony, ton script est ok, mais si tu as 100 fichiers? Besoin d'ajouter ce code dans tous ces:

include_once ('scripts.php');
strip_php_extension ();

Je pense que vous incluez un menu dans chaque fichier php (votre menu est probablement affiché dans toutes vos pages Web), vous pouvez donc ajouter ces 2 lignes de code uniquement dans votre fichier de menu. Ce travail pour moi: D

1
user5499497

Supprimer une extension de fichier via .htaccess

URL d'origine: http://ravinderrathore.herobo.com/contact.php

règle htaccess pour supprimer l’extension de fichier .php, .html etc. de l’URL.

RewriteRule ^(.*)$ $1.php

After Rewriting: http://ravinderrathore.herobo.com/contact

RewriteEngine on

RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/

RewriteRule ^index(.*)?$ index.php$1 [L,QSA]

RewriteRule ^login_success(/)?$ login_success.php [L,QSA]

RewriteRule ^contact(/)?$ contact.php [L,QSA]
1
Ravinder Kumar

comme Igor mais devrait fonctionner sans la ligne 2:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
1
Jon

En fait, le moyen le plus simple de manipuler ceci est de

  1. Ouvrez un nouveau dossier sur votre serveur, par exemple. "Les données"
  2. Mettez index.php (ou index.html) dedans

Ensuite, l'URL www.votresite.com/data lira ce fichier index.php. Si vous voulez aller plus loin, ouvrez un sous-dossier (par exemple, "Liste"), insérez un autre index.php dans ce dossier et www.yoursite.com/data/list pourra exécuter ce fichier PHP.

De cette façon, vous pouvez avoir un contrôle total sur cela, très utile pour le référencement.

1
Dan Horvat

à peu près la même chose avec la première réponse à propos de, mais un avantage supplémentaire.

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

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

Ajoutez simplement si vous avez une autre extension de fichier dans vos sites

0
Võ Minh