2009-12-29 12 views
0

J'ai un script PHP nommé index.php dans un dossier nommé blog. Il y a trois vues différentes.Apache Mod-Rewrite Question

  1. http://www.myDomain.com/blog/index.php
  2. http://www.myDomain.com/blog/index.php?tags=list des catégories
  3. http://www.myDomain.com/blog/index.php?post=name post

Je voudrais changer la vue à partir de l'URL.

  1. /blog réoriente au numéro 1 ci-dessus
  2. /blog/nom-de-catégorie réoriente à Numbe 2 ci-dessus
  3. /blog/nom de catégorie/nom-de-post réoriente au numéro 3 au dessus.

À l'heure actuelle, j'ai les règles mod_rewrite suivantes.

RewriteRule ^blog$ blog/index.php [L] 
RewriteRule ^blog/(.+)/(.+)$ blog/index.php?post=$2 [L] 
RewriteRule ^blog/(.+)$ blog/index.php?tags=$1 [L] 

Cela ne fonctionne pas, et je ne sais pas pourquoi. En ce moment, il redirige toujours la dernière URL:

blog/index.php?tags=$1

Et les données GET contient "index.php".

En outre, si ajouter une barre oblique à la règle finale comme ceci:

RewriteRule ^blog/(.+)/$ blog/index.php?tags=$1 [L] 

Toutes les réoriente fonctionnent très bien. Le problème est, je suis requis pour avoir une barre oblique à la fin de l'URL si je veux la vue catégorie.

Des idées ce qui se passe ici? comment je peux résoudre ce problème?


Merci pour les réponses. J'ai compris que mon problème était un effet secondaire d'avoir mes scripts dans le dossier nommé "blog". Voici à quoi ressemblait index.php:

<?php 

define ('BASE_PATH', "../blog/"); 

include_once(BASE_PATH . 'controller/Controller.php'); 

$controller = new Controller(); 
$controller->invoke(); 

Voir le problème? Parce que le chemin de base de mon script était "blog", mod_rewrite réécrivait toutes mes références dans le programme. En renommant mon dossier de script sur blogScript, cela a résolu le problème.

Répondre

1

Dans une expression régulière, . correspond à tout caractère (y compris un / caractère), alors essayez de faire ^blog/([^/]+)$ au lieu de faire correspondre un caractère à l'exception d'un /.

+0

C'est pour la réponse, je m'en souviendrai à propos de la. char – user182666

1

Vous pouvez l'écrire comme suit.

RewriteRule ^blog/?$ blog/index.php [L] 
RewriteRule ^blog/(.+?)/(.+?)/?$ blog/index.php?post=$2 [L] 
RewriteRule ^blog/(.+?)/?$ blog/index.php?tags=$1 [L] 
+0

Merci pour la réponse! – user182666