2010-01-01 4 views
3

Je travaille sur la construction d'un CMS interne pour les clients. Au lieu de créer un nouveau fichier php pour chaque page, je me demande s'il existe un moyen de charger une page basée sur l'URL, mais pas un fichier php physique à cet endroit. Donc, si je visite www.mysite.com/new-page, je voudrais juste que ce soit une référence à mon modèle, contenu, etc. plutôt qu'un vrai fichier .php. Désolé si je ne l'ai pas expliqué correctement, mais j'ai du mal à l'expliquer.PHP: Servir les pages sans les fichiers .php dans la structure de fichiers

Merci.

+0

Je pense que vous faites référence à quelque chose comme mediawiki (cms utilisé sur wikipedia) non? Si l'article n'existe pas déjà (et par conséquent, le chemin d'accès), chargez une page qui vous aidera à en créer un. –

+0

Bien sûr, c'est ce qu'on appelle le routage. De bonnes implémentations sont trouvées dans des frameworks MVC comme Ruby on Rails, Django, CodeIgnitor, etc. – JAL

Répondre

4

On dirait que vous avez besoin du Front Controller pattern.

Fondamentalement, chaque URL est redirigé vers une page PHP qui détermine ce qu'il faut faire avec. Vous pouvez utiliser Apache mod_rewrite pour cela avec ce .htaccess:

RewriteEngine on 
RewriteBase/
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ index.php 

redirigeant tout sauf les fichiers de contenu statique à index.php. Ajuster au besoin.

Si vous voulez juste affecter l'URL/nouvelle page essayez quelque chose comme:

RewriteEngine on 
RewriteBase/
RewriteRule ^new-page/ myhandler.php 

Toutes les URL commençant par « nouvelle page » sera envoyé à myhandler.php.

+0

Oui, ça ressemble à ce que je recherche. Mais, je ne veux pas vraiment que toutes les pages soient servies depuis la page d'index. Je veux toujours des URLs comme www.mysite.com/page/page2 et www.mysite.com/page-test. Est-ce que l'exemple que vous avez donné pour cela? –

+0

oui, avec une configuration correcte – jrharshath

4

Ce sera normalement le serveur Web qui gère cela pour vous en conjonction avec votre code PHP. Ainsi, par exemple, si vous utilisez Apache, vous pouvez utiliser mod_rewrite pour faire quelque chose comme:

RewriteEngine on 
RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L] 

Et puis dans votre code php vous pouvez vérifier $_GET['page'] pour voir quelle page est appelée.

Donc visiter mysite.com/page/blah aurait vraiment accès à index.php?page=blah.

1

Utiliser mod_rewrite pour réécrire les URL dans la page PHP est la solution. Je préfère utiliser une règle de réécriture plus générique qui réécrit toutes les URL qui ne prennent pas dans un fichier d'un répertoire existant sur le serveur.

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'. 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 
Questions connexes