1 votes

Redirection spécifique 30x

Comment faire une redirection 30x dans htaccess mais seulement pour les URLs qui commencent par ceci :

http://example.com/x/*

Je veux les rediriger vers (HTTPS) :

https://example.com/x/*
  • comme dans wildcard, tel que : exemple.com/x/batman

Je ne veux pas que la redirection affecte les autres URL de ce domaine.

Je peux faire cette redirection avec PHP, mais si je comprends bien, si je le fais dans mes .htaccess il sera un tout petit peu plus rapide car PHP n'aura pas à être exécuté. Est-ce exact ? En gros, j'essaie de faire le direct le plus rapide possible.

C'est ce que j'ai fait jusqu'à présent, mais ce n'est pas grand chose. Il fonctionne, et il redirige https vers http avec succès, mais j'ai besoin que ce soit seulement pour des urls spécifiques, qui suivent le modèle décrit ci-dessus :

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

1 votes

Vous n'avez qu'un seul domaine ? Est-ce que le www sous-domaine accessible ? Je suppose anything_here ne fait pas réellement partie de l'"URL qui commence par..." comme le laisse entendre votre question ? Ainsi, le chemin URL commence simplement par /x/ ? Avez-vous essayé quelque chose ? Cela ressemble à une redirection standard de HTTP vers HTTPS. Avez-vous obtenu une erreur ou une redirection incorrecte lorsque vous avez essayé de mettre en œuvre cette méthode ? Avez-vous d'autres directives dans votre .htaccess fichier ?

0 votes

@MrWhite J'ai mis à jour ma question

0voto

MrWhite Points 11269
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Pour correspondre à un chemin URL spécifique qui commence /x/ alors changez le RewriteRule à lire ^x/ (sans préfixe slash) à la place. Par exemple :

RewriteRule ^x/ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Vous devrez vider le cache de votre navigateur avant de procéder au test. (Pour cette raison, il est plus facile de tester d'abord avec des redirections temporaires 302).

Cependant, quelques remarques concernant vos directives...

  • Il s'agit manifestement d'une redirection de HTTPS vers HTTP - le contraire de ce que vous avez indiqué dans votre exemple précédent (et très peu recommandé en 2019) !

  • L'utilisation de la HTTPS variable d'environnement (c'est-à-dire. %{ENV:HTTPS} ) n'est pas standard. Je suppose que vous avez reçu des instructions de votre hôte à ce sujet ?


https://example.com/?wildcard pour être redirigé vers http://example.com/wildcard

El RewriteRule motif (ex. ^x/ ci-dessus) ne correspond qu'au chemin d'accès à l'URL, ce qui exclut notamment la partie chaîne de requête de l'URL.

Pour faire correspondre la chaîne de caractères de la requête, vous avez besoin d'un fichier RewriteCond ( condition ) qui correspond à la directive QUERY_STRING variable du serveur.

Par exemple, pour rediriger example.com/?foo zu example.com/foo vous feriez quelque chose comme ce qui suit :

RewriteCond %{QUERY_STRING} ^(foo)$
RewriteRule ^$ /%1 [QSD,R,L]

%1 est un renvoi au premier groupe capturé dans la dernière condition appariée. Notez qu'il n'y a pas de chemin URL dans l'exemple ci-dessus (indiqué par la regex ^$ ). Le site QSD (Query String Discard) est requis pour supprimer la chaîne de requête de l'URL redirigée.

Si vous vouliez une variante plus "sauvage" (qui correspondrait à tout ce qui est dans la chaîne de requête), comme vous semblez le suggérer dans votre exemple, alors quelque chose comme :

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^$ /%1 [QSD,R,L]

Notez qu'un R sans code d'état entraîne par défaut une redirection 302 (temporaire).

0 votes

Oui, https->http, je joue avec le scrubbing referrer et je teste différentes techniques. En ce qui concerne la variable d'environnement, c'est celle qui a fonctionné sur mon hôte parmi celles que j'ai essayées. Quelle est celle qui est standard, et que je devrais utiliser/obtenir pour fonctionner ? également, votre solution fonctionne !

0 votes

Serait-il possible, avec cette solution, de remplacer /x/ par n'importe quelle url qui a une chaîne de requête. ex : https ://domain.tld/?wildcard pour être redirigé vers http ://domain.tld/wildcard

0 votes

Si ENV:HTTPS fonctionne pour vous, c'est celui-là qu'il faut utiliser. Cela implique que votre hôte utilise une sorte de proxy frontal/équilibreur de charge pour gérer la connexion SSL/TLS. Alors que ENV:HTTPS est "non standard", il semble être raisonnablement courant. Le "standard" serait le HTTPS variable de serveur (contrairement à la variable env ), accessible via %{HTTPS} . Mais s'il y a un proxy frontal qui gère SSL, cela ne fonctionnera pas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X