web-dev-qa-db-fra.com

Réécriture .htaccess lorsque le site a plusieurs domaines

Je gère un site Web de club universitaire qui a deux trois (mise à jour: j'ai récemment découvert le troisième) domaines, disons www.meow.co.uk, foo.uni.ac.uk/bar/meow/ et uni.ac.uk/bar/meow. J'utilise le .htaccess suivant dans le dossier foo.uni.ac.uk/bar/meow/ afin de supprimer ".html" des pages.

#meow.co.uk/page will display the contents of meow.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

#302 from meow.co.uk/page.html to meow.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=302,L]

Cela fonctionne bien sur www.meow.co.uk/page.html --> www.meow.co.uk/page, mais pour l'autre domaine, il considère foo.uni.ac.uk/ comme répertoire racine, donc foo.uni.ac.uk/bar/meow/page.html --> foo.uni.ac.uk/page. Je veux qu'il aille à --> foo.uni.ac.uk/bar/meow/page.

Comment puis-je modifier le fichier htaccess afin qu'il fonctionne pour les deux domaines? Ou à défaut, comment puis-je rediriger de foo.uni.ac.uk/bar/meow vers www.meow.co.uk?

4
binaryfunt

RewriteRule ^(.*)\.html$ /$1 [R=302,L]

Le problème est que pour www.meow.co.uk vous devez rediriger vers /$1 (comme ci-dessus) et pour foo.uni.ac.uk vous devez rediriger vers /bar/meow/$1. Je ne pense pas qu'il y ait une solution immédiate à ce problème.

Cependant, vous pouvez définir de manière conditionnelle une variable d'environnement (par exemple, BASE_URL) sur la valeur de l'URL de base requise pour la redirection, en fonction de la valeur de Host. Et utilisez cette variable d'environnement dans la directive RewriteRule.

Par exemple, en haut de votre script, définissez la variable d'environnement:

SetEnvIf Host "foo\.uni\.ac\.uk" BASE_URL=/bar/meow

Lorsque le site est accessible via www.meow.co.uk, alors BASE_URL ne sera pas défini (c'est-à-dire qu'il est vide).

Ensuite, changez votre substitution RewriteRule pour utiliser ceci:

RewriteRule ^(.*)\.html$ %{ENV:BASE_URL}/$1 [R=302,L]

Vous devez changer la redirection 302 (temporaire) en une redirection 301 (permanente) lorsque vous avez confirmé que tout fonctionne correctement.


PDATE: Cependant, il est préférable de canoniser l'URL et de le rediriger vers le domaine canonique (c'est-à-dire www.meow.co.uk). Avec trois domaines différents, vous avez beaucoup de contenu en double potentiel. Donc, au lieu de ce qui précède, redirigez simplement vers le domaine canonique en haut de votre script:

RewriteCond %{HTTP_Host} !=www.meow.co.uk [NC]
RewriteRule ^bar/meow/(.*) http://www.meow.co.uk/$1 [R=301,L]

Juste pour clarifier ... vous avez déjà changé les URL sur votre site pour utiliser la version sans extension et cette redirection n'est requise que pour les anciennes URL indexées, partagées, etc. Oui?

2
MrWhite