2011-06-22 2 views
4

J'ai changé le CMS pour mon site et il a réécrit les URL pour être plus convivial mais j'ai 20 pages qui sont liées sur différents sites sur le web. Je veux que les gens cliquent sur ces anciens liens pour qu'ils soient redirigés vers leurs nouveaux posts respectifs.Je cherche des conseils pour réécrire des URL spécifiques

Je pensais d'abord utiliser un tableau PHP avec une redirection javascript mais maintenant je pense que .htaccess mod-rewrite serait le meilleur.

Quel est le meilleur moyen de rediriger des URL spécifiques vers leurs nouvelles URL? Utilisez le fichier .htaccess pour les redirections.

Répondre

3

Par exemple:

# This allows you to redirect index.html to a specific url 
Redirect /index.html http://example.com/location/ 

Ajoutez une expression régulière pour correspondre à vos réécritures et envoyez à l'URL distante créée dynamiquement. Par exemple:

# Dynamic redirect 
RedirectMatch 301 yourUrl/\(.*)\$ http://external.com/someUrl.html?dynamicVal=$1 

qui enverrait ... yourURL/123 ->http://external.com/someUrl.html?dynamicVal=123

+2

+1 avec la note que si ceux-ci sont permanents, assurez-vous d'utiliser 301, 'Redirection 301 /index.html http: // example.com/location /' –

+0

Merci cela semble que cela devrait fonctionner, mais ce n'est pas rediriger. C'est à quoi ressemble mon htaccess. Je reçois aucune erreur et aucune page de redirection # BEGIN WordPress RewriteEngine On RewriteBase/ RewriteRule^index \ .php $ - [L] RewriteCond% {} de REQUEST_FILENAME -f RewriteCond% { REQUEST_FILENAME}! -d RewriteRule. index.php [L] RewriteEngine On // 301 Redirect ancien fichier Redirect 301 article.php histoire = 3432442 Blog-post.php – Michael

2

Si vous parlez de URL sur vos pages, alors la meilleure façon est d'éditer toutes ces pages avec URL correctes en cours. Si vous parlez de "Que faire quand quelqu'un frappe mon ancienne URL (à partir de leurs signets ou en cliquant sur un lien sur un autre site, par exemple) alors la meilleure façon est de rediriger (avec le code 301) demandes à un nouvel emplacement en utilisant le module de réécriture d'URL d'Apache

Exemple:

# Activate Rewrite Engine 
RewriteEngine On 

# redirect to another page on the same site 
RewriteRule ^mypage.php /other/mypage.php [R=301,L,QSA] 

# redirect to another page on ANOTHER site 
RewriteRule ^mypage.php http://www.anothersite.com/mypage.php [R=301,L,QSA] 

Voici le lien vers Apache's manual for mod-rewrite

un autre endroit utile -...

+0

@LayzOne - Alors, pourquoi utiliser Rewrite vs Redirect? La redirection peut être effectuée de manière permanente, mais la réécriture devra être effectuée à chaque hit. Juste curieux des pro de ReWrite vs Redirect. THX. –

+1

@Twisted Dans mes exemples, c'est en fait ** redirect ** (code 301) - RewriteRule peut faire à la fois redirection et réécriture. Pourquoi utiliser RewriteRule (de 'mod_rewrite') au lieu de Redirect/RedirectMatch (de' mod_alias') - raison principale que vous pouvez créer des redirections qui ne se produiront que SI certaines conditions seront remplies, ce qui le rend plus universel (mais si il n'y a pas de telles exigences complexes (seulement des règles simples) alors ils feront tous deux le même travail). – LazyOne

0

Apache prend en charge des modules différents pour réécrire/redirect demandé URIs:

  • mod_alias avec Alias et AliasMatch de réécriture interne, ainsi que Redirect et RedirectMatch pour externe redirigeant
  • mod_rewrite avec RewriteRule de réécriture interne et externe rediriger

La principale différence entre les mod_alias et Les directives mod_rewrite sont que les directives Alias et Redirect de mod_alias fonctionnent avec les modèles de préfixe de chemin tandis que les autres directives (c.-à-d. AliasMatch, RedirectMatch et RewriteRule) fonctionnent avec des expressions régulières. Un modèle de préfixe de chemin est toujours toujours apparié lorsqu'il s'agit d'un préfixe qualifié du chemin demandé et que les segments de chemin restants sont automatiquement ajoutés au chemin cible.Voici un exemple:

Redirect /foo/bar http://other.example/quux 

Si /foo/bar est demandé, il devient redirigé vers http://other.example/quux; De même /foo/bar/baz est redirigé vers http://other.example/quux/baz. Alias fonctionne mais seulement en interne. En revanche, AliasMatch, RedirectMatch et RewriteRule fonctionnent avec des expressions régulières et peuvent être utilisés non seulement pour correspondre aux préfixes de chemin. Voici un exemple:

RedirectMatch ^/foo/bar$ http://other.example/quux 

Si /foo/bar est demandé, il devient redirigé vers http://other.example/quux (comme l'exemple ci-dessus Redirect). Mais si /foo/bar/quux est demandé, il n'est pas redirigé car ^/foo/bar$ ne correspond pas /foo/bar/quux.

D'autres différences entre mod_alias et mod_rewrite sont que mod_rewrite peut également examiner d'autres parties de l'URI à l'exception du chemin et même des champs d'en-tête de requête HTTP. Cela permet également des opérations plus complexes avec plusieurs conditions.

Questions connexes