web-dev-qa-db-fra.com

Comment faire une redirection 301 pour une URL complète?

J'ai beaucoup d'URL, qui ne peuvent pas être redirigées ou, mieux, réécrites avec mod_rewrite dans .htaccess, alors au lieu de cela, j'ai créé manuellement les redirections 301. Ce n'est pas trop d'enregistrements, environ 40 redirections, et je copie en gros l'URL d'un tableau Excel. Mais comment rediriger l'URL complète du sous-domaine vers le domaine principal:

Je veux rediriger de cette façon:

http://m.somesite.com.au/site/somesite/faqs -> 301 http://www.somesite.com.au/faqs/

Et bien sûr, redirigez le sous-domaine global de cette manière:

http://m.somesite.com.au -> 301 http://www.somesite.com.au

ce qui fonctionne réellement. Qu'est-ce que je fais mal?

Par exemple:

Cela redirige le travail

redirect 301 /about-us/go-social/ http://www.somesite.com/about-us/
redirect 301 /about-us/team/John/ http://www.somesite.com/about-us/

Et tout un tas de redirections similaires, puis à propos de redirections comme ceci, qui ne fonctionnent pas:

Cette redirection ne fonctionne pas

redirect 301 http://m.somesite.com.au/site/somesite/faqs http://www.somesite.com.au/faqs/

Puis-je rediriger l'URL complète de cette façon ou existe-t-il une autre solution? Cela ne fonctionne toujours pas avec RewriteCond:

# Single URL 

RewriteCond %{HTTP_Host} ^m\.somesite\.com\.au$ [NC]
RewriteRule ^site/somesite/faqs/?$ http://www.somesite.com.au/faqs/ 


# Global subdomain redirect
RewriteCond %{HTTP_Host} ^m\.somesite\.com\.au  [NC]
RewriteRule ^(.*) http://www.somesite.com.au/$1 [NC,L,R=301]

Fichier .htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress


# 301 Redirects
redirect 301 /about-us/go-social/ http://www.somesite.com.au/about-us/
redirect 301 /about-us/rider-profiles/Alex/ http://www.somesite.com.au/about-us/
{...}

# redirect http://m.somesite.com.au/site/somesite/faqs to http://www.somesite.com.au/faqs/
# m.somesite.com.au redirects
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{HTTP_Host} ^m\.somesite\.com.au$ [NC]
RewriteRule ^site/somesite/faqs/?$ http://www.somesite.com.au/faqs/ [NC,L,R=301]


# Global subdomain redirect
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{HTTP_Host} ^m\.somesite\.com.au  [NC]
RewriteRule ^(.*) http://www.somesite.com.au/$1 [R=301]
2
Alan Kis

redirect 301 http://m.somesite.com/site/somesite/faqs http://www.somesite.com/faqs/

Cela ne fonctionne pas car l'URL source doit être un chemin d'URL, commençant par une barre oblique (comme vous l'avez utilisé pour les redirections qui fonctionnent). , pas une URL absolue.

En d'autres termes, il devrait être écrit comme suit (dans un fichier .htaccess situé à la racine du document des sous-domaines):

redirect 301 /site/somesite/faqs http://www.somesite.com/faqs

PDATE: Notez que j'ai supprimé la barre oblique finale de la fin de l'URL cible. Incluez la barre oblique de fin pour les deux ou omettez-la pour les deux .

Puis-je rediriger l'URL complète de cette façon

Qu'entendez-vous par "URL complète"? Ceci est identique à votre première redirection. Vous pouvez rediriger l'URL complète si vous le souhaitez. (?)

PDATE: Étant donné que m.example.com et www.example.com pointent exactement au même endroit (comme indiqué dans les commentaires), vous devez faire attention aux boucles de redirection, même si cela devrait vous convenir. un. Cependant, cela peut être mieux fait avec mod_rewrite (voir ci-dessous) car vous pouvez alors vérifier spécifiquement l'hôte. .

Cela ne fonctionne toujours pas, avec RewriteCond

Notez que Redirect (mod_alias) et RewriteCond/RewriteRule (mod_rewrite) appartiennent à différents modules Apache. Donc, vous devriez ne jamais mélanger les redirections externes des deux modules, car l'ordre d'exécution peut être inattendu.

Je suppose que vous le faites déjà, mais ... pour utiliser mod_rewrite, vous devez activer le moteur de réécriture et vous assurer que FollowSymLinks est également activé:

Options +FollowSymLinks
RewriteEngine On

PDATE: (Après l'enregistrement du fichier .htaccess) L'ordre des directives est important. Ces redirections externes (à l'aide de mod_rewrite) doivent précéder les WordPress réécritures internes .

Les redirections externes doivent apparaître tout en haut de votre fichier .htaccess.

Il vous suffit d'inclure les directives RewriteEngine et Options une fois en haut de votre fichier.

Supprimez/convertissez les modalias Redirects, car ils pourraient entrer en conflit avec les redirections mod_rewrite.

RewriteCond %{HTTP_Host} ^m\.somesite\.com.au  [NC]
RewriteRule ^(.*) http://www.somesite.com.au/$1 [R=301]

Légèrement bien rangé ...

RewriteCond %{HTTP_Host} =m.somesite.com.au
RewriteRule (.*) http://www.somesite.com.au/$1 [R,L]

Soit échapper tous vos points littéraux (\.) et utilisez start (^) et fin ($), ou utilisez un exact correspond (= préfixe/opérateur lexicographiquement égal) comme je l’ai fait. Vous n'avez pas besoin d'ancres avec un motif .*. Il est recommandé d'utiliser l'indicateur L avec des redirections (même s'il s'agit du dernier).

Toujours tester avec des redirections temporaires (R ou R=302) - celles-ci ne sont pas mises en cache par le navigateur, contrairement aux redirections permanentes. Lorsque vous êtes satisfait, cela fonctionne, puis passez à une redirection permanente (301).

5
MrWhite