web-dev-qa-db-fra.com

URL de redirection avec plusieurs points de fin et barres de fin à l'aide de .htaccess

J'ai besoin de virer la redirection 301
de example.com... à example.com
et example.com////// à example.com

Voici mon code:

RewriteCond %{THE_REQUEST} \ /([^\?\ .]*)\.(?:\?|\ |$)
RewriteRule ^ /%1 [L,R=301]

Ça ne marche pas.

Et voici mon . Htaccess fichier:

RewriteEngine on

RewriteCond %{HTTP_Host} ^www.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^.*/index\.php
RewriteRule ^(.*)index.php$ /$1 [R=301,L]

RewriteCond %{THE_REQUEST} \ /([^\?\ .]*)\.(?:\?|\ |$)
RewriteRule ^ /%1 [L,R=301]
3
Dmitry

Le ou les points à la fin du nom d'hôte (c'est-à-dire n domaine pleinement qualifié ) apparaîtront dans la variable de serveur HTTP_Host (pas THE_REQUEST) et les barres obliques multiples en regard de le début du chemin d'URL sera présent dans la variable THE_REQUEST (comme vous utilisez), vous aurez donc besoin d'au moins deux règles. Essayez quelque chose comme:

# Remove trailing dot(s) on the hostname
RewriteCond %{HTTP_Host} \.$
RewriteRule (.*) https://example.com/$1 [R=301,L]

# Remove multiple slashes at the start of the URL-path
RewriteCond %{THE_REQUEST} \ //+
RewriteRule (.*) /$1 [R=301,L]

La directive RewriteCond recherche simplement plusieurs barres obliques au début du chemin d'URL (après le premier espace de la variable THE_REQUEST ). La redirection repose ensuite sur le fait qu'Apache tronque automatiquement plusieurs barres obliques dans le chemin d'URL qui correspond au modèle RewriteRule et l'utilise ($1 backreference) dans la substitution .

NB: Assurez-vous de vider le cache de votre navigateur avant de tester car des 301 erronés ont probablement été mis en cache.

De plus: Je pense qu'un nom d'hôte avec plus d'un point est strictement non valide - la résolution échouera et le serveur ne sera jamais réellement envoyé. (?) Si la requête est émise par un navigateur, celui-ci tronquera probablement les multiples points de fin, ne laissant qu'un seul (c.-à-d. Pleinement qualifié), avant de faire la demande.

Référence:

1
MrWhite

peut-être celui-ci:

<IfModule mod_rewrite.c>
  RewriteCond %{THE_REQUEST} //|..
  RewriteRule ^.*$ /$0 [R=301,L,NE]
</IfModule>
0
Evgeniy