2010-08-05 10 views
44

Je souhaite rediriger 301 un site Web entier, mais exclure tout dans un dossier appelé "uploads" qui existe dans le répertoire racine. J'ai fait des recherches sur google pour cela, mais je n'ai rien trouvé, ou je ne pensais pas que ce que j'avais vu était correct.Rediriger le site avec .htaccess mais exclure un dossier

Pouvons-nous craquer ceci?

Répondre

55

Essayez cette mod_rewrite règle:

RewriteEngine on 
RewriteRule !^uploads($|/) http://example.com%{REQUEST_URI} [L,R=301] 

Cette règle ne correspond à aucun chemin d'URL qui ne pas commencent par la /uploads ou /uploads/ (leader / est manquant dans le modèle en raison de la suppression du préfixe de chemin quand il est utilisé dans les fichiers .htaccess) et redirige la requête vers le chemin correspondant au example.com.

+0

Fonctionne comme un charme, merci! – PaulAdamDavis

+0

Existe-t-il une option pour faire cela en arrière-plan, de sorte que l'utilisateur n'est pas réellement redirigé, mais toute la requête est transmise par proxy à une autre adresse? – p1100i

+0

@burninggramma Essayez 'P' au lieu de' R = 301'. – Gumbo

19

Je pense que vous voulez ceci:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/uploads/ 
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L] 

Si vous obtenez 500 Internal Error double-vérifier que vous avez un espace entre } et ! sur la deuxième ligne.

49

Réponse simple Je suis tombé sur moi-même.

Au sommet avant d'autres appels ajouter la

suivante
RewriteRule ^(uploads) - [L] 
+1

Que Dieu bénisse cette rangée de code: D Merci –

+0

Aucun problème @ M.Svrcek. – PseudoNinja

+1

Si quelqu'un est curieux de savoir ce que fait le [L]: http://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_l –

6

Une solution basée mod-alias

Redirect tous sauf un dossier spécifique

Ajoutez la ligne suivante à votre racine /.htaccess:

RedirectMatch 301 ^/((?!uploads).*)$ http://newdomain.com/$1 

Cela redirigera toutes les pages (sauf/uploads/*) de votre ancien domaine vers le nouveau domaine.

+1

Cela fonctionne parfaitement!Très utile, car je ne pouvais pas utiliser mod_rewrite car il n'était pas activé sur le serveur d'un client – lucaferrario

Questions connexes