web-dev-qa-db-fra.com

Ordre d'exécution de différentes redirections htaccess

Il semble que peu importe ce que je recherche, je ne comprends pas pourquoi je continue à avoir ce problème et, pour une raison quelconque, je ne trouve pas une bonne explication sur la façon dont cela fonctionne. Aussi désolé si cette quête a déjà été posée, mais je cherche une réponse depuis 2 jours et je ne trouve pas la réponse. (probablement en cherchant les mauvais mots-clés)

MAIS.

Je rencontre actuellement un problème concernant mes redirections qui utilisent les fonctions Redirect et RewriteRule.

Le contexte est le suivant.

La société pour laquelle je travaille a récemment migré et mis à jour son site Web depuis le serveur et la conception. Cela signifie bien sûr qu'il y a des pages qui ne sont plus disponibles ou des URL qui doivent être redirigées.

Le problème a été soulevé lorsque je parcourais toutes les redirections et j'ai remarqué que certaines redirections n'allaient pas vers la page qu'elles devraient.

Vous trouverez ci-dessous une partie du fichier .htaccess qui me donne les problèmes. Les lignes sont dans le même ordre que dans mon .htaccess.

<IfModule mod_rewrite.c>
RewriteEngine On

Redirect 301 /nieuws/168/Luchtvaartmaatschappij-delft-onderspit-bij-Hoge-Raad [https domainname]/nieuws
Redirect 301 /nieuws/145/Artikel-Telegraaf-Vertraging [https domainname]/nieuws
Redirect 301 /nieuws/145/Artikel-Telegraaf:-Vertraging.html [https domainname]/nieuws
Redirect 301 /nieuws/108/Wie-gaat-nu-via-(reis)verzekeraars-werken-`Reisagenten-kunnen-klanten-ook-verwijzen` [https domainname]/blog/euclaim-gaat-nu-via-reis-verzekeraars-werken
Redirect 301 /nieuws/136/Technisch-mankement-geen-overmacht.html [https domainname]/blog/technisch-mankement-geen-overmacht

RewriteRule ^nieuws/([1-9]|[1-9][0-9]|[1-9][0-9][0-9]||[1-9][0-9][0-9][0-9])/.*$ /nieuws [R=301,NC,L]

Le problème est que quand je vais à /nieuws/136/Technisch-mankement-geen-overmacht.html je suis redirigé vers /nieuws.

Le problème

Maintenant, le problème n’est pas que je ne sache pas quelle partie de l’accès htaccess est la cause de ce problème, mais plutôt pourquoi et comment puis-je résoudre ce problème.

La RewriteRule récupère l'URL et redirige vers /nieuws et peu importe où je la place, elle continue de la récupérer sans échec. J'ai essayé de placer le RewriteRule en haut, en bas, juste derrière les redirections, comme dans mon exemple, mais rien ne semble empêcher le RewriteRule de prendre la priorité la plus élevée.

Est-ce que ce comportement est normal ou est-ce que je fais quelque chose de mal ici?

Si vous avez besoin de plus d'informations s'il vous plaît faites le moi savoir.

5
Controvi

Redirect appartient à mod_alias, alors que RewriteRule est une directive mod_rewrite. Deux modules différents. Différents modules s'exécutent indépendamment et à des moments différents au cours de la requête.

Sauf si vous avez un serveur Apache personnalisé, mod_rewrite exécute toujours avant mod_alias, malgré l'ordre apparent des directives dans le fichier de configuration Apache (par exemple. .htaccess).

En règle générale, si vous utilisez mod_rewrite pour la redirection (et/ou la réécriture d'URL), vous devez utiliser mod_rewrite pour toutes vos redirections afin d'éviter de tels conflits.

Notez que vous devrez vous assurer que tous les caches intermédiaires ont été effacés avant les tests car les 301 sont mis en cache en dur par le navigateur.


Redirect 301 /nieuws/168/Luchtvaartmaatschappij-delft-onderspit-bij-Hoge-Raad [https domainname]/nieuws

Par exemple, puisque Redirect est correspondance du préfixe, la directive équivalente RewriteRule serait:

RewriteRule ^nieuws/168/Luchtvaartmaatschappij-delft-onderspit-bij-Hoge-Raad(.*) https://example.com/nieuws$1 [R=301,L]

Cependant, si cela est censé être une correspondance exacte, alors:

RewriteRule ^nieuws/168/Luchtvaartmaatschappij-delft-onderspit-bij-Hoge-Raad$ https://example.com/nieuws [R=301,L]
6
MrWhite