Je veux supprimer l'extension .jsp
de mon URL et la remplacer par une barre oblique, par exemple. example.com/xyz.jsp
à example.com/xyz/
et example.com/xyz.jsp?ab=12
à example.com/xyz/?ab=12
.
J'ai utilisé:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
Et
RewriteEngine On
RewriteBase /
# external redirect from /example.html to /example
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+([^.]+)\.html [NC]
RewriteRule ^ /%1/ [R=301,L]
# internal forward from /example/ to //example.html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^(.+?)/?$ /$1.html [L]
Dans mon .htaccess
mais ni l'un ni l'autre ne fonctionnent pas correctement.
Vous devrez vous assurer que MultiViews
est désactivé avant que cela fonctionne correctement, car cela risquerait d'entrer en conflit avec vos directives mod_rewrite. Ajoutez ceci dans votre fichier .htaccess:
Options +FollowSymLinks -MultiViews
(FollowSymLinks
doit être activé pour que mod_rewrite fonctionne, donc pour être sûr.)
Ensuite, quelque chose comme ce que vous avez déjà semble raisonnable:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.jsp -f
RewriteRule (.+)/$ $1.jsp [L]
J'ai rendu la barre oblique obligatoire sur l'URL (sinon vous avez potentiellement deux URL accédant au même contenu - le contenu dupliqué).
PDATE: Pour rediriger toutes les demandes vers l'URL .jsp
vers l'URL canonique (c'est-à-dire sans l'extension et avec une barre oblique), à peu près comme ci-dessous (semblable à ce que vous aviez dans votre question) aurait besoin d'aller avant les directives ci-dessus:
RewriteCond %{THE_REQUEST} \.jsp\s
RewriteRule (.+)\.jsp$ /$1/ [R=301,L]
Cela n'est strictement nécessaire que si les URL .jsp
_ ont été indexées ou liées de manière externe. S'il s'agit d'un nouveau site, cette étape est facultative.
Il est plus efficace de faire correspondre ce que vous pouvez avec le motif RewriteRule
(c.-à-d. (.+)\.jsp$
), plutôt que d'avoir un crochet -all regex ici. La condition THE_REQUEST
garantit que cela ne s'applique qu'aux demandes initiales et non aux demandes réécrites - empêchant ainsi une boucle de redirection.
Donc, en résumé:
# Disable MultiViews
Options +FollowSymLinks -MultiViews
RewriteEngine On
# Remove file extension from URLs (external redirect)
RewriteCond %{THE_REQUEST} \.jsp\s
RewriteRule (.+)\.jsp$ /$1/ [R=301,L]
# Internally rewrite extensionless URLs back to ".jsp"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.jsp -f
RewriteRule (.+)/$ $1.jsp [L]
DEBUGGING: Pour vous aider à déboguer ce qui précède, ajoutez la directive suivante sous la directive RewriteEngine On
et vérifiez les variables d'environnement (MOD_REWRITE_THE_REQUEST
et MOD_REWRITE_URL_PATH
) dans votre serveur. code de côté:
RewriteCond %{THE_REQUEST} (.*)
RewriteRule (.*) - [E=MOD_REWRITE_THE_REQUEST:%1,E=MOD_REWRITE_URL_PATH:$1]
Que contiennent ces variables d'environnement lorsque vous accédez à une URL .jsp
?