web-dev-qa-db-fra.com

Rediriger IPSuite "? / Topic /" URL vers "? Thread /" pour Woltlab

Je suis passé du système de forums IPSuite au système de forum de gravure Woltlab. Ce qui se passe ensuite est que mes anciens liens qui commencent par:

example.com/index.php?/topic/

Maintenant, commencez par:

example.com/forum/index.php?thread/

dans mon nouveau site.

Ainsi, lorsque quelqu'un clique sur mes publications Facebook, il récupère l'ancienne adresse à la place de la nouvelle et une page d'erreur 404.

Je veux créer tous mes liens entrants à partir de google facebook et, par conséquent, se convertir à ma nouvelle adresse (example.com/forum/index.php?thread/) afin de ne pas devoir les modifier un par un. Je sais que c'est quelque chose qui concerne l'implémentation de certains codes via le fichier .htaccess mais je ne suis pas sûr de quoi J'ai aussi vu que mais je ne l'ai pas eu car c'est un autre cas.

3
StackBuck

Vous déclarez que les URL ne "commencent par" que le préfixe mentionné, je suppose donc que le "slug" ou "ID de forum" (?) Qui suit ce préfixe est identique sur les anciens et les nouveaux sites.

Donc, vous avez une ancienne URL du formulaire:

example.com/index.php?/topic/<something-here>

cela devrait rediriger vers:

example.com/forum/index.php?thread/<something-here>

Étant donné que vous devez lire à partir de la partie chaîne de requête de l'URL, vous devrez utiliser mod_rewrite (par opposition à un simple mod_alias Redirect).

Cela devrait aller vers le haut du fichier .htaccess à la racine du document de votre site. L'ordre de ces directives peut être important si vous avez des directives existantes dans votre fichier.

Par exemple, essayez quelque chose comme ce qui suit:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^/topic/(.*)
RewriteRule ^index\.php$ /forum/index.php?thread/%1 [R=302,L]

Le %1 dans la RewriteRulesubstitution est une référence arrière du groupe capturé, c'est-à-dire. (.*) dans le précédent CondPattern. Notez que cela n’est actuellement pas restrictif, puisque vous n’avez pas précisé en quoi consiste le reste de vos URL. Cependant, il est préférable d’être aussi restrictif que possible. Par exemple, si le reste de vos URL ne contient que les caractères a à zet traits d'union et sont toujours supérieurs à 10 caractères, modifiez ce modèle pour qu'il se lise: ^/topic/([a-z-]{10,})

Notez qu'il s'agit d'une redirection temporaire (302). Une fois que vous êtes sûr que tout fonctionne correctement, vous souhaiterez probablement le remplacer par une redirection permanente (301). c'est à dire. Remplacez R=302 par R=301 dans les drapeaux RewriteRule. Les navigateurs 301 sont fortement mis en cache par le navigateur. Les tests peuvent donc poser problème, à moins que vous ne désactiviez tout d'abord la mise en cache.

Juste quelques notes supplémentaires:

  • Êtes-vous sûr de vouloir conserver index.php dans l'URL? (Bien qu'il ne s'agisse pas simplement de modifier cette règle dans .htaccess - vous devrez également modifier les URL dans votre application.)
  • Ce type de structure d'URL rend très difficile d'avoir des paramètres URL. (Vous ne savez pas comment/si cela serait supporté par votre logiciel de forum?)
1
MrWhite