.htaccess mod rewrite 301-redirect
-
09-06-2019 - |
Question
Je veux: tous les liens qui ne contiennent pas le nom de fichier (pas les fichiers .html, .jpg, .png, .css) sont redirigés avec l’état 301 vers un répertoire, par exemple: http://mysite.com/article - > http://mysite.com/article/ Mais http://mysite.com/article/article-15.html ne redirige pas . Quelle expression régulée dois-je écrire à .htaccess pour l’ajout d’une barre oblique aux répertoires virtuels?
La solution
Je pense que les solutions suivantes pourraient fonctionner:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
En ce qui concerne mod_rewrite, je ne peux jamais en être sûr sans avoir testé ...
Autres conseils
Précisions nécessaires:
Étant donné l'URL: http: // serveur / chemin / fichier
Est-ce que cela est redirigé vers: http: // serveur / chemin /
Ou est-ce qu'il est redirigé vers: http: // serveur / chemin / fichier /
Comme dans: voulez-vous que les redirections aillent vers le chemin parent ou voulez-vous simplement ajouter une barre oblique et supposer que le répertoire sort du chemin actuel?
La règle RewriteRule ci-dessus de MB échouera sur des chemins tels que / a
car il doit correspondre à au moins deux caractères après la barre oblique. De plus, il ne correspond qu'aux URL du répertoire supérieur.
RewriteRule ^(([^\/]+\/)*[^\/\.]+)$ http://%{HTTP_HOST}/$1/ [R=301,L]
Cela a-t-il pour but de réduire la pollution de l'historique / les faux négatifs?