web-dev-qa-db-fra.com

redirection 204 avec htaccess si l'URL contient certaines chaînes

Je reçois des tonnes d'URL avec "non défini" ajoutés à la fin de l'URL, ce qui représente environ 20% de ma page vue. J'ai essayé de vérifier la source de script troublante et je ne le trouve pas. J'ai essayé des solutions mais aucune d'entre elles ne fonctionne. Enfin, j'essaie d'envoyer l'URL avec la chaîne "indéfinie" pour rediriger 204 à l'aide de htaccess

est-ce correct?

RewriteRule ^undefined$ - [R=204,NC,L]

dois-je ajouter le drapeau "dernier L"?

où est-ce que je le mets?

au-dessus de wordpress?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^undefined$ - [R=204,NC,L]
</IfModule>

# 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

à l'intérieur de wordpress?

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

ou après wordpress?

# 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

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^undefined$ - [R=204,NC,L]
</IfModule>

j'ai cherché cela partout, et je veux m'assurer que cela est correct en demandant à cette pile qui a traité cela souvent. Merci beaucoup!

3
somuch72

Afin de correspondre à "undefined" à la fin de fin du chemin URL, vous avez besoin du modèle d'expression régulière undefined$. Le modèle ^undefined$ (que vous avez utilisé dans votre question) correspond à l'URL exacte "non définie", qui ne correspondra jamais, à moins que la demande ne soit faite pour http://example.com/undefined.

Cette directive devrait aller en haut de votre fichier .htaccess (après la directive RewriteEngine On). Vous n'avez besoin que d'une directive RewriteEngine On en haut de votre script.

Donc, si vous êtes sûr que ces demandes arrivent de votre site, alors vous pouvez servir un 204 No Content comme vous le faites (oui, le L le drapeau est requis).

RewriteRule undefined$ - [R=204,NC,L]

Dans les navigateurs compatibles, en ce qui concerne l'utilisateur, littéralement rien se produit si l'utilisateur suit un tel lien (s'il s'agit vraiment d'un lien sur lequel il clique). Cependant, cela peut évidemment être déroutant pour l'utilisateur. De même, s'il s'agit d'un site Web externe qui crée un lien vers vous, rien ne se produit lorsque l'utilisateur clique sur le lien - ils n'atteignent pas votre site Web.

Cependant, il serait préférable de rediriger vers l'URL correcte (s'il s'agit simplement de supprimer la partie "non définie" de la fin du chemin de l'URL). Cela intercepterait toutes les situations et informerait les moteurs de recherche de l'URL correcte (les rapports dans les articles liés suggèrent que Googlebot explore également ces URL).

RewriteRule (.*)/undefined$ /$1 [R=301,L]
4
MrWhite

Si vous obtenez beaucoup de demandes avec des URL non définies ajoutées et que vous savez que les utilisateurs qui accèdent à ces URL sont des personnes et non des robots, vous feriez bien mieux d'utiliser le code d'état HTTP 301 et de le rediriger vers la bonne.

L'utilisation du code d'état 204 ne vous aidera pas car cela signifie "Pas de contenu" et l'utilisateur devra alors modifier manuellement l'URL de la barre d'adresse en la sélectionnant correctement pour accéder à la page. En fonction du navigateur, une demande renvoyant un code d'état 204 produira un message contextuel indiquant que le document n'a pas de contenu ou que l'écran sera simplement vide.

3
Mike