Question

Problème

Je dois rediriger des URL de commodité courtes vers des URL plus longues. Le site en question utilise un ensemble de sous-domaines pour identifier un ensemble de versions de développement ou de versions en direct.

J'aimerais que l'URL vers laquelle certaines demandes sont redirigées inclue HTTP_HOST, de sorte que je n'ai pas à créer de fichier .htaccess personnalisé pour chaque hôte.

Exemple spécifique à l'hôte (extrait du fichier .htaccess)

Redirect /terms http://support.dev01.example.com/articles/terms/

Cet exemple fonctionne bien pour la version de développement exécutée sur dev01.example.com. Si j'utilise la même ligne dans le fichier principal .htaccess pour la version de développement exécutée sous dev02.example.com, je serais redirigé au mauvais endroit.

Règle idéale (incertain de la syntaxe correcte)

Redirect /terms http://support.{HTTP_HOST}/articles/terms/

Cette règle ne fonctionne pas et sert simplement d’exemple de ce que je voudrais réaliser. Je pourrais ensuite utiliser la même règle sous différents hôtes et obtenir le résultat correct.

Des réponses?

  • Cela peut-il être fait avec mod_alias ou nécessite-t-il le mod_rewrite plus complexe?
  • Comment cela peut-il être réalisé avec mod_alias ou mod_rewrite? Je préférerais une solution mod_alias si possible.

Clarifications

Je ne reste pas sur le même serveur. Je voudrais:

J'aimerais pouvoir utiliser la même règle dans le fichier .htaccess sur example.com et dev.example.com. Dans ce cas, je devrais pouvoir faire référence à HTTP_HOST en tant que variable plutôt que de le spécifier littéralement dans l'URL vers laquelle les demandes sont redirigées.

J'examinerai le paramètre HTTP_HOST comme suggéré mais j'espérais un exemple fonctionnel.

Était-ce utile?

La solution

Il est étrange que personne n’ait fait la réponse actuelle (lol):

RewriteCond %{HTTP_HOST} support\.(([^\.]+))\.example\.com
RewriteRule ^/terms http://support.%1/article/terms [NC,QSA,R]

Pour vous aider à faire le travail plus rapidement, mon outil préféré pour vérifier l’expression rationnelle:

http://www.quanetic.com/Regex (n'oubliez pas de choisir ereg ( POSIX) au lieu de preg (PCRE)!)

Vous utilisez cet outil pour vérifier l'URL et voir si elle est valide ou non.

Autres conseils

Je pense que vous voudrez capturer la valeur HTTP_HOST puis l'utiliser dans la règle de réécriture:

RewriteCond %{HTTP_HOST} (.*)
RewriteRule ^/terms http://support.%1/article/terms [NC,R=302]

Si je comprends bien votre question, vous souhaitez une redirection 301 (indiquez au navigateur de passer à une autre URL). Si ma solution ne vous convient pas, essayez cet outil: http://www.htaccessredirect.net/ index.php et déterminez ce qui fonctionne pour vous.

//301 Redirect Entire Directory
RedirectMatch 301 /terms(.*) /articles/terms/$1

//Change default directory page
DirectoryIndex 

Selon cette feuille de triche ( http: //www.addedbytes .com / download / mod_rewrite-cheat-sheet-v2 / png / ) cela devrait fonctionner

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain2.com/$1

Notez que je n'ai pas le moyen de tester cela, alors cela devrait être considéré comme un pointeur dans la bonne direction, par opposition à une réponse explicite.

Si vous restez sur le même serveur, le mettre dans votre fichier .htaccess fonctionnera quel que soit le serveur:

RedirectMatch 301 ^/terms$ /articles/terms/

Produit:

http://example.com/terms -> http://example.com/articles/terms

ou:

http://test.example.com/terms -> http://test.example.com/articles/terms

Évidemment, vous aurez besoin d’ajuster la correspondance REGEX, entre autres, pour vous assurer qu’elle s’adapte à ce que vous allez lui faire subir. Il en va de même pour le 301, vous pouvez choisir un 302 si vous ne voulez pas que les navigateurs mettent en cache la redirection.

Si vous voulez:

http://example.com/terms -> http://server02.example.com/articles/terms

Ensuite, vous devrez utiliser le paramètre HTTP_HOST.

Vous n'avez pas besoin d'inclure cette information. Fournissez simplement un URI relatif à la racine.

Redirect temp /terms /articles/terms/

Ceci est expliqué dans la la documentation de mod_alias :

  

La nouvelle URL doit être une URL absolue commençant par un schéma et un nom d’hôte, mais un chemin d’URL commençant par une barre oblique peut également être utilisé. Dans ce cas, le schéma et le nom d’hôte du serveur actuel seront ajoutés.

Cela ressemble à ce dont vous avez vraiment besoin, c’est juste un alias?

Alias /terms /www/public/articles/terms/
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top