2009-07-11 4 views
2

J'ai actuellement un site web que j'essaye d'optimiser en termes de référencement.Comment puis-je réécrire les paramètres de requête aux paramètres de chemin dans Apache?

J'ai le site de travail avec des URL telles que:

domain.com/?app=about

Dans mon application, $_GET[app] est réglé sur 'à propos', comme prévu .

Maintenant, je veux faire en sorte qu'une URL comme domain.com/about est traitée comme si elle était domain.com/?app=about. Comment puis-je faire cela dans un fichier Apache .htaccess?

Répondre

8

Ceux-ci sont connus sous le nom RewriteRule s, et ils sont assez simples:

RewriteEngine on 
RewriteRule ^about$ /index.php?app=about 

Here's the documentation

En ce qui rend plus générique, que diriez-vous:

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

Cette volonté faire une demande à quelque chose comme/staff ou/contact rediriger vers index.php? app = [staff | contact]

+0

Y at-il de toute façon pour rendre cela plus générique, c'est-à-dire, en avoir un général pour toutes les applications au lieu d'en écrire un pour chaque application? – bear

+0

+1 - mais cet exemple va fonctionner, mais si vous avez quelques petites choses à réécrire, mieux vaut utiliser une solution plus générique. Qu'en est-il de '^ [^ /] $ index.php? App = $ 1' Je suis peut-être incorrect dans cette regex mais l'idée générale est là: P – alex

+0

merci à vous deux: D – bear

2

Utilisez dans votre .htaccess

RewriteEngine on 
RewriteBase /your-site # only if neccessary 

RewriteRule ^([^/])$ index.php?app=$1 [R,L] 

EDIT

J'ai ajouté le sens drapeau L processus ce que la dernière règle, et le drapeau de R qui par lui-même ne change pas l'URL .. juste réécrit en interne. Faire R = 301 redirigera le navigateur vers la page réécrite, ce qui est utile pour le débogage.

+0

il y arrive, mais semble que quelque chose ne va pas . http://thinkteen.co.uk essayer/contacter ou/personnel :) – bear

+0

non:/Je ne peux toujours pas obtenir ma tête autour d'elle – bear

0

Création d'un .htaccess général obtenir le chemin demandé peut être fait avec la ligne suivante:

RewriteRule ^((.+/)+)$ /index.php?path=$1 [L,B] 

Cela vous donnera le chemin demandé se sont échappés proprement si le chemin est /bonjour/monde vous obtiendra bonjour% 2Fworld dans le paramètre path. Utilisez la fonction PHP urldecode() pour obtenir le format d'origine. Fonctionne uniquement si l'URL se termine par "/".

REMARQUE Si vous avez d'autres réécritures dans le même fichier, placez celui-ci en dernier, car il correspond à peu près à n'importe quoi.

Questions connexes