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.
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]