2010-12-02 12 views
1

J'ai une situation où j'essaie d'utiliser la directive RedirectMatch d'Apache pour rediriger tous les utilisateurs vers une URL HTTPS à l'exception de un seul utilisateur (Linux) accédant à son propre espace web. J'ai trouvé un morceau de code d'expression régulière qui nie le nom d'utilisateur:URL de l'espace utilisateur Negate dans Apache

^((?!andy).)*$ 

mais lorsque je tente de l'utiliser dans la directive:

RedirectMatch ^((?!andy).)*$ https://www.example.com/ 

l'URL:

http://www.example.com/~andy/ 

obtient encore redirigé vers l'URL HTTPS:

https://www.example.com/ 

Lorsque je veux ignorer la redirection. Je ne suis pas un expert en expressions régulières (ou Apache), donc toute aide pour obtenir ce travail serait grandement appréciée.

Merci, Stephen

Edit: OK, l'intrigue s'épaissit ... si je commente la ligne:

# RedirectMatch ^((?!andy).)*$ https://www.example.com/ 

et redémarrez Apache, puis essayez l'URL:

http://www.example.com/andy 

Je reçois une réponse 404, ce qui est attendu. Mais, si je tente l'URL:

http://www.example.com/~andy 

La redirection est déclenchée et je suis redirigé vers:

https://www.example.com/ 

et comme je le disais, la redirection est commenté et j'ai redémarré le serveur. Comment cela peut-il arriver? Donc, ce n'est pas juste une chose regex, il semble qu'Apache redirige sans instruction!

+0

Attention: '^ (. (?! andy)) * $' correspond à toute chaîne qui n'a pas * * 'andy' contiennent partout, il sera également déclencher sur' randy' etc. Je ne peux pas expliquer le comportement que vous voyez, cependant. –

Répondre

0

Quelque chose dans le genre de ceci peut-être? (Utilise mod_rewrite au lieu de mod_alias)

RewriteCond %{REQUEST_URI} !^/~andy(/|$) ... 
RewriteCond %{SCRIPT_URI} ^http: 
RewriteRule ^/(.*) https://mysite.com/$1 [R=307]
+0

Merci pour votre réponse. Cela a semblé fonctionner exactement de la même manière que RedirectMatch. Je pense que l'espace web utilisateur doit être géré différemment. Si j'utilise http://www.example.com/~qwerty (pas un véritable espace utilisateur), la regex fonctionne et je ne suis pas redirigé. – LostInTheWoods