Routage Chemin d'accès d'URL avec PHP et Apache
Je suis en train de créer une belle structure de l'url de mon site.
Mon routeur de classe ne fonctionnera que si l'url est dans le style des ?quelque chose=valeur.
Comment puis-je obtenir si cela fonctionnera comme:
/something/value
Dans mon .htaccess j'ai:
Options FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|txt|gif|jpg|png)$ index.php?$1 [L,QSA]
Et dans mon routeur classe je suis en train de faire:
class init {
function __construct()
{
$URL = substr($_SERVER['REQUEST_URI'], 19) ;
$URLElements = explode('/', $URL) ; //Adjust if needed.
$class = $URLElements[0] ;
$method = $URLElements[1] ;
if(($t = substr_count($URL, '/')) > 1)
{
for($i=2;$i<$t+1;$i++) {
echo $URLElements[$i].'<br />';
}
}
}
}
Merci à Jason, mon .htaccess est maintenant juste:
FallbackResource /t2013/public_html/index.php
Pensez-vous que vous souhaitez rediriger cette structure?
Mec de mauvaise approche! Vous avez besoin de quelque chose comme ça ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ yourscrpit.le php?var1=$1&var2=$2 dans votre .htaccess
Mais il a à travailler avec des classes et des méthodes avec un nombre illimité de paramètres, c'est à dire d'un nom de classe/méthode/param1/param2/param3 etc.
mec, cassants approche 🙂
Mec de mauvaise approche! Vous avez besoin de quelque chose comme ça ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ yourscrpit.le php?var1=$1&var2=$2 dans votre .htaccess
Mais il a à travailler avec des classes et des méthodes avec un nombre illimité de paramètres, c'est à dire d'un nom de classe/méthode/param1/param2/param3 etc.
mec, cassants approche 🙂
OriginalL'auteur imperium2335 | 2012-11-28
Vous devez vous connecter pour publier un commentaire.
Pour un moyen rapide pour gérer Avant la fin de Contrôleurs avec Apache, utilisez
directive fallbackresource
et d'analyser l'URL avec PHP.Lire les liens que j'ai fournis devrait être un bon début. Après cela, découvrez des fonctions PHP comme
parse_url
.Intéressant... n'avait pas couru à travers de nombreux diverses configurations de contrôleur, j'ai travaillé avec ou vu posté sur dans des endroits comme StackOverflow. Très simple de mise en œuvre.
Il a ajouté que de Apache 2.2.17 (ou cerca). Je l'ai trouvé à être plus performant dans de tels cas. Convenu qu'il est utilisé. Peut faire un post de blog à bientôt.
McCreary Qui est assez awesum, rend le processus beaucoup plus simple, j'ai édité mon post pour refléter ce que j'ai maintenant dans le cas où vous souhaitez faire d'autres commentaires :).
OriginalL'auteur Jason McCreary
htaccess doit être quelque chose comme ceci
ainsi, par exemple
/home/quelque chose/valeur serait redirigé vers /home.le php?quelque chose=valeur
Donner un aller, pas complètement sûr de ce mais fait quelque chose de semblable auparavant.
OriginalL'auteur Grant Carlisle
À partir d'un point de vue PHP, vous devez simplement régler votre init de la classe de clé de
$_SERVER['REQUEST_URI']
au lieu de$_SERVER['QUERY_STRING']
. Vous n'êtes pas montrer votre logique complet ici, mais ma conjecture est que vous pouvez simplement couper la première/
puis exploser l'URI sur/
pour obtenir les composantes.De un .htaccess point de vue, vous pouvez simplement modifier votre dernière ligne à:
Vous n'avez pas besoin de détecter spécifiquement les images/css/js ici
RewriteCond
déjà fait des exceptions à la règle de réécriture pour tout réel des fichiers ou des répertoires. Notez que dans leRewriteRule
je l'ai fait sortir de la Chaîne de Requête Append (QSA) drapeau en place dans le cas où vous avez toujours voulu faire quelque chose comme/controller?some=string&of=data
Si vous n'avez pas anticiper à l'aide de chaînes de requête à tous avec votre nouveau URI, vous pouvez omettre cet indicateur.mod_rewrite
et jamais de réécriture l'URL.Je suis d'accord c'est une performance de vidange (en particulier lors de l'utilisation de mod_rewrite .htaccess). Honnêtement, je voudrais votre réponse à cette question mieux que le mien, mais il a été ignoré. Je vais laisser la réponse ici dans le cas de l'affiche qui choisit de ne pas utiliser votre solution ou n'ont pas la possibilité d'activer
mod_dir
pour quelque raison que ce soit.OriginalL'auteur Mike Brant