2009-08-27 12 views
2

J'ai actuellement une application web dont j'ai besoin d'optimisation, et une des méthodes ou quelque chose que je essaie de réaliser est tel:Réécrire les paramètres Url - Modifier http: // myweb /? Dept = dept & app = app à http: // myweb/dept/app

http://myweb/dept/app

de

http://myweb/?dept=dept&app=app

J'ai actuellement ce que le code PHP pour elle:

if(empty($_REQUEST['dept'])) {  
$folder = "apps/"; 
} else {  
$folder = str_replace("/", "", $_REQUEST['dept']) . "/"; }  
    if(empty($_REQUEST['n'])) {  
    include('user/home.php'); 
    } else {  
      $app = $_REQUEST['n']; 
      if(file_exists($folder.$app.".php")) {   
      include($folder.$app.".php");  
      } else {     
      include("global/error/404.php");  
      } 
     } 

Comment est-ce que je fais ceci?

Je suis actuellement la moitié là-bas avec:

RewriteRule ^([A-Za-z]+)$ /index.php?app=$1 

mais réinscrit seulement une partie de celui-ci.

Merci

Répondre

2

La façon dont beaucoup de cadres font est l'une des règles suivantes:

RewriteRule ^(.*)$ /index.php?q=$1 
RewriteRule ^(.*)$ /index.php 

Dans le 1er cas, vous obtenez le que ry dans $ _GET ["q"].
Dans le deuxième cas, vous devez obtenir la chaîne de requête de $ _REQUEST ou quelque chose. (Faites juste quelques var_dumps jusqu'à ce que vous trouviez ce dont vous avez besoin).
Ensuite, vous exploser ("/") ceci et vous êtes tous ensemble. Regardez comment TYPO3, eZPublish, Drupal faites cela.

Vous devez également ajouter les conditions suivantes pour permettre au site d'ouvrir vos fichiers statiques (comme images/css/js/etc). Ils disent à Apache de ne pas faire la réécriture si l'URL pointe vers un emplacement qui correspond réellement à un fichier, un directoy ou un lien symbolique. (Vous devez le faire avant la directive RewriteRule)

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
0

Cela devrait fonctionner:

RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ index.php?dept=$1&app=$2 [QSA] 

Vous devez la partie QSA pour que tous les paramètres GET à ajouter à l'URL réécrite.

Vous trouverez peut-être qu'il est plus flexible de tout réécrire dans index.php, puis de gérer la division de l'URL là-bas, par ex.

.htaccess:

#only rewrite paths that don't exist 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ index.php/$1 

PHP:

<?php 
$parts = explode('/', $_SERVER['PATH_INFO']); 
$dept = isset($parts[0]) ? $parts[0] : 'someDefault'; 
$app = isset($parts[1]) ? $parts[1] : 'anotherDefault'; 
+0

Pourquoi ai-je été abaissé? –

+0

Je ne sais pas, mais je l'ai équilibré pour vous :) – bear

Questions connexes