Générez des règles de redirection .htaccess 301 et 302
Transformez une liste de redirections en règles Apache prêtes à coller, sans écrire vous-même d’expressions régulières.
Lancer gratuitement
Indiquez chaque ancien chemin et sa destination, choisissez une réponse permanente 301 ou temporaire 302, puis obtenez les lignes RewriteRule exactes et un bloc .htaccess complet. Le générateur protège les chemins sources, accepte les destinations locales et les URL HTTP ou HTTPS absolues, conserve l’ordre fourni et signale les paires incomplètes avant qu’elles ne créent des redirections défectueuses.
Préparez une liste de redirections claire
Commencez par une ligne pour chaque adresse à déplacer. L’outil qui permet de générer des règles de redirection .htaccess attend un chemin source dans le champ from et une destination dans le champ to. La source doit être un chemin relatif à la racine commençant par une barre oblique, par exemple /anciens-produits/widget. N’ajoutez ni chaîne de requête ni fragment à la source, car RewriteRule d’Apache compare le chemin de l’URL, pas ces composants. La destination peut être un autre chemin relatif à la racine du même site ou une URL HTTP ou HTTPS complète si le visiteur doit changer d’hôte. Utilisez des caractères encodés en pourcentage lorsqu’une URL l’exige, plutôt que des espaces littéraux. Conservez les lignes dans l’ordre d’évaluation souhaité. Même si les règles produites correspondent à des chemins complets et évitent de nombreux conflits, un ordre réfléchi simplifie la révision, la maintenance et la comparaison avec un tableau de migration. Chaque ligne est validée ; si from ou to manque, la génération s’arrête et désigne la paire incomplète.
Choisissez un comportement permanent ou temporaire
Sélectionnez 301 lorsque le déplacement est définitif et que les moteurs de recherche, les navigateurs et les systèmes en aval doivent mémoriser l’adresse de remplacement. Sélectionnez 302 pour un changement temporaire, par exemple pendant une courte campagne, une maintenance ou un test contrôlé. Le statut choisi s’applique uniformément à toutes les paires d’une requête, ce qui empêche un tableau mixte de produire silencieusement un comportement inattendu. Chaque ligne utilise un motif source ancré, une destination validée et les indicateurs Apache R=301,L ou R=302,L. Les ancres imposent une correspondance exacte du chemin au lieu d’une sous-chaîne trop large, tandis que L arrête la passe de réécriture après l’application de la règle. Le générateur échappe aussi la ponctuation des expressions régulières dans la source : un point ou des parenthèses littérales ne correspondent donc pas accidentellement à d’autres adresses. Vérifiez que votre serveur lit les fichiers .htaccess et que mod_rewrite est activé ; cet outil crée des directives, mais ne peut ni examiner ni modifier l’installation Apache.
Installez et vérifiez le bloc généré
Copiez la valeur htaccess dans le fichier .htaccess approprié, dans la portée du site qui traite les chemins sources. Le résultat ne contient que des lignes RewriteRule ; une configuration existante peut donc déjà comporter RewriteEngine On. Ajoutez cette directive séparément si la réécriture n’est pas encore activée. Sauvegardez la configuration actuelle avant toute modification et effectuez si possible les essais dans un environnement de préproduction. Demandez chaque ancienne URL, puis vérifiez le statut de réponse, l’en-tête Location, la page finale et l’absence de chaîne de redirections imprévue. Testez également une URL voisine qui ne doit pas être redirigée : ces contrôles négatifs révèlent des interactions qu’un test réussi de la destination ne montre pas. Les directives voisines, les hôtes virtuels, les couches proxy et les réécritures d’un CMS peuvent modifier le comportement des règles Apache locales. Pour l’automatisation, l’API renvoie un tableau de règles séparées et un bloc joint par des sauts de ligne. Une requête coûte $0.002 ; le même générateur déterministe fonctionne aussi dans le navigateur pour les migrations ponctuelles.
Cas d’usage
Mettez en ligne un site remanié
Convertissez la table validée des anciens et nouveaux chemins en directives permanentes exactes avant le lancement de la nouvelle architecture.
Lancez une campagne temporaire
Créez des règles 302 cohérentes pour des déplacements brefs de pages de destination qui ne doivent pas devenir définitifs.
Déplacez certaines pages vers un autre domaine
Produisez des règles avec des destinations HTTPS absolues tout en gardant chaque chemin source explicite et vérifiable.
Questions fréquentes
Quel est le prix ?
Une requête API coûte $0.002. Vous pouvez également utiliser le générateur dans votre navigateur sur cette page.
La sortie comprend-elle RewriteEngine On ?
Non. Elle contient uniquement les lignes RewriteRule, car de nombreux fichiers .htaccess existants activent déjà le moteur de réécriture.
Une requête peut-elle mélanger des redirections 301 et 302 ?
Non. Le type sélectionné s’applique à toutes les paires. Utilisez des requêtes distinctes pour séparer les règles permanentes et temporaires.
La destination peut-elle viser un autre domaine ?
Oui. Elle peut être une URL HTTP ou HTTPS absolue sans identifiants intégrés, ou un chemin relatif à la racine du site actuel.
Que se passe-t-il si une paire est incomplète ?
La génération s’arrête avec une erreur d’entrée non valide qui désigne la paire et précise si le champ from ou to manque.
Les chaînes de requête sont-elles acceptées dans les sources ?
Non. RewriteRule compare les chemins et non les requêtes ; celles-ci nécessitent des directives RewriteCond supplémentaires hors de ce générateur.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/web/htaccess-redirect-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pairs":[{"from":"/old-page","to":"/new-page"},{"from":"/docs/v1/","to":"https://docs.example.com/v2/"}],"redirect_type":301}'const res = await fetch("https://api.kit.forhosting.com/web/htaccess-redirect-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pairs": [
{
"from": "/old-page",
"to": "/new-page"
},
{
"from": "/docs/v1/",
"to": "https://docs.example.com/v2/"
}
],
"redirect_type": 301
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/htaccess-redirect-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pairs": [
{
"from": "/old-page",
"to": "/new-page"
},
{
"from": "/docs/v1/",
"to": "https://docs.example.com/v2/"
}
],
"redirect_type": 301
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/htaccess-redirect-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pairs":[{"from":"/old-page","to":"/new-page"},{"from":"/docs/v1/","to":"https://docs.example.com/v2/"}],"redirect_type":301}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pairs":[{"from":"/old-page","to":"/new-page"},{"from":"/docs/v1/","to":"https://docs.example.com/v2/"}],"redirect_type":301}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/htaccess-redirect-generate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"pairs": [
{
"from": "/old-page",
"to": "/new-page"
},
{
"from": "/docs/v1/",
"to": "https://docs.example.com/v2/"
}
],
"redirect_type": 301
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.htaccess_redirect_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_items | 500 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |