2009-10-24 5 views
0

Je construis un site webcomic, mais l'ordre des chapitres a changé de manière significative. J'ai écrit manuellement les conversions pour moi-même dans une forme comme ceci:Utilisation de mod_rewrite pour rediriger 70+ URL avec des variables

36 -> 26,1

37 -> 28

38 -> 28,1

39 -> 29

40 -> 30

41 -> 30,1

Fondamentalement, en suivant ce guide, je veux convertir tous les URLs comme http://www.domain.com/view.php?chapter=38 au type plus récent comme http://www.domain.com/c28.1.

Je veux également m'assurer que ceux qui demandent un numéro de page, comme view.php?chapter=38&page=4 ont leurs numéros de page transmis à la redirection, comme ceci: c28.1/p4.html. Il semblerait assez simple, sauf que j'ai environ 70 d'entre eux à mettre en œuvre, et je suis un peu inquiet si cela affecte considérablement la performance du site (70 est beaucoup ..?) Et ne peut pas obtenir la bande dessinée et variables de page pour réécrire correctement. Donc, ma question est, comment puis-je réaliser ceci, quelle est ma meilleure solution? Si la performance n'est pas un problème, je préférerais la garder dans le .htaccess avec mon autre code mod_rewrite, mais si la seule façon raisonnable de le faire est d'écrire un script .php et de l'appeler pour faire la redirection, je peux le faire - Mais je ne sais pas vraiment comment faire pour que PHP fasse ça. S'il vous plaît gardez à l'esprit que les 70 ou plus mentionnés sont les seuls que j'aurai jamais, alors je ne me soucie pas de faire une base de données facilement accessible. Je veux juste que les redirections fonctionnent avec un minimum d'agitation.

Je serai tellement reconnaissant pour toute réponse. Merci d'avance si quelqu'un peut m'aider à comprendre cela.

Répondre

0

J'ai fini par consulter les gens formidables de freenode #httpd et j'ai trouvé une solution. Pour moi, comme je veux seulement attraper des requêtes pour view.php, j'ai trouvé que cela fonctionnait simplement pour écrire un script view.php qui rassemblait des choses à partir d'un tableau. Pas de mod_rewrite nécessaire. Le script que j'utilise maintenant ressemble à:

<? 

$chapters = array(
    // old => new 
    1 => 2, 
    2 => 3, 
    3 => 4, 
    10 => 21 
); 

if (! isset($_GET['chapter']) || ! isset($chapters[$chapter = (int)$_GET['chapter']])) { 
    header('HTTP/1.1 404 Not Found'); 
    echo 'Page Not Found'; 
    exit; 
} 

$url = '/c' . $chapters[$chapter]; 
if (isset($_GET['page'])) 
    $url .= '/p' . $_GET['page'] . '.html'; 

header('Location: ' . $url, 301); 

?> 

Merci pour votre aide, cependant, gh3.

0

Je pense que d'une façon plus légère (en termes de lignes à l'intérieur htaccess) à l'approche est, comme vous l'avez mentionné, d'utiliser .htaccess pour gérer urls comme:

RewriteRule ^c([0-9]+)$ view.php?chapter=$1 
RewriteRule ^c([0-9]+).([0-9]+)$ view.php?chapter=$1&section=$2 
RewriteRule ^c([0-9]+).([0-9]+)/p([0-9]+).html$ view.php?chapter=$1&section=$2&page=$3 

Et puis les associer à une script php qui va gérer le contenu unique.

Je peux vous suggérer que vous devriez également mapper par rewriterule avec une redirection 301 toutes les anciennes urls afin de permettre aux personnes venant d'un serp de moteur de recherche d'être redirigées vers la bonne nouvelle URL du contenu.

Espérons que cela aide.

+0

Oh, j'ai déjà une pièce comme ça.Pour clarifier, les anciennes URLs ressemblaient à 'view.php? Chapter = 1 & page = 3' \' view.php? Chapter = 1' sans ruses mod_rewrite impliquées mais les nouvelles URLs (au format 'c1/p1.html') en fait rediriger vers un 'viewer.php? chapter = 1 & page = 1' J'ai ajouté le" er "à la fin du nom du nouveau script d'affichage de bande dessinée juste pour garder les choses moins confuses que j'ai prévu de faire cette grande carte dans le Votre code ci-dessus semble être le type de code qui permet les plus jolies URL '/ c1/p1.html', et je l'ai déjà. Donc cela ne résout pas vraiment mon problème .. – SuitCase

Questions connexes