2013-06-30 4 views
0

Je suis en train de faire un mod rewrite pour obtenir cette URL: localhost/test/index.php bonjoururl rewriting avec l'expression régulière suivante

J'ai créé un fichier pour cette page appelée hello.php et est dans le dossier/test

Pour clarifier, j'ai une autre page qui a un lien vers mon hello.php, mais quelle est l'URL correcte pour que je puisse afficher localhost/test/index.php? hello dans l'URL quand Je clique sur le lien pour accéder à ma page hello.php.

Ce qui suit ne semble pas comme il est juste:

RewriteRule ^.*$ index.php?$1 [L] 
+0

s'il vous plaît clarifier pour moi, voulez-vous hello.php être montré sur 'index.php? hello' url? – vladkras

+0

oui, je veux hello.php montrer comme index.php? Bonjour quand je clique sur un lien vers cette page – learntosucceed

+0

Vous voulez montrer 'hello.php' dans la barre d'adresse mais être envoyé à' index.php? Hello'? Si vous essayez de créer des URL conviviales, avez-vous vérifié ma réponse? –

Répondre

0

Essayez si vous voulez simplement faire des fichiers php.

RewriteEngine on 
    RewriteRule (.*)\.php$ /index.php?$1 [L] 

Pour clarifier ce que ma réponse fait. Il vous donne des URL plus conviviales qui ressemblent à ce que vous demandiez.

Donc vous pouvez utiliser localhost/hello.php et ce sera internally rediriger vers /localhost/index.php?hello. En interne signifie qu'ils ne verront jamais localhost/index.php?hello et verront toujours localhost/hello.php dans leur navigateur.

Vous pouvez faire n'importe quelle URL et il va réécrire dans un fichier php. par exemple. localhost/index.php?newpage et vous pouvez utiliser /localhost/newpage.php

Espérons que ce soit plus clair.

EDIT

Vous voulez le contraire, mais je ne sais pas comment votre PHP est construit, mais les chaînes de requête sont généralement paires champ/valeur. Par exemple name=john, page=contact, action=hello etc. Vous avez index.php?hello mais hello n'a pas de contenu ou de valeur.

C'est probablement la raison pour laquelle vous avez du mal à réécrire votre URL. L'utilisation de $_GET nécessiterait une valeur.

Alors, que je le ferais faire, est si votre URL est comme ceci en utilisant des paires champ/valeur

index.php?action=hello 

Puis dans le fichier index.php que vous pourriez faire quelque chose comme

$action = $_GET["action"]; 

if($action == "hello"){ 
//show contents of hello, include a page or whatever 
} 

Une fois que vous avez de bonnes URL, il serait facile de le réécrire.

Donc, si l'URL que vous souhaitez afficher est comme

index.php?action=hello et que vous souhaitez rediriger vers hello.php

Votre .htaccess ressemblerait à ceci

RewriteRule ^action=([^/]+) /$1.php [R,L] 

Ce redirigerez à le fichier php. Si vous ne voulez pas afficher la redirection et la garder en interne, vous pouvez supprimer le drapeau R et conserver [L].

Personnellement, je ne veulent pas voulez l'utilisateur de voir des chaînes de requête très long exemple d'URL. mysite.com?page=music&artist=someartist&title=sometitle

Donc, toutes mes URL sont réécrites pour être plus courtes et plus conviviales comme ma réponse originale.

+0

Ohh je vois. Y a-t-il un ordre inverse? Je veux voir localhost/index.php? Hello au lieu de localhost/hello.php – learntosucceed

+0

Serait-ce ainsi?

RewriteRule (.*)\/index.php?$1 (.*)\.php$ [L]
learntosucceed

+0

Eh bien ..... voir ma mise à jour. –

0
  1. vous n'avez pas besoin pour .htaccess 2. aussi loin que vous utilisez GET Parametr - l'utiliser dans index.php:

    if (isset($_GET['hello'])) include('hello.php'); 
    

cela montrera le contenu de hello.php à l'intérieur index.php