J’ai les URL suivantes:
www.website.com/index.php?section=index www.website.com/index.php?section=freebies www.website.com/index.php?section=deals www.website.com/index.php?section=articles
et le paramètre d’URL de pagination suivant pour chaque: page = 1 par exemple
www.website.com/index.php?section=freebies&page=1
J’utilise les règles de réécriture ci-dessous pour changer l’URL en:
www.website.com/freebies/1 etc
www.website.com/freebies/1
et www.website.com/freebies/
fonctionnent correctement, mais si je supprime la barre oblique par exemple:
www.website.com/freebies
Il montre www.website.com/freebies/?section=freebies&page=1
Comment puis-je empêcher cela?
Mes règles de réécriture:
RewriteRule ^([0-9]+)/?$ index.php?section=index&page=$1 [NC,L] RewriteRule ^freebies/?$ index.php?section=freebies&page=1 [L] RewriteRule ^articles/?$ index.php?section=articles&page=1 [L] RewriteRule ^deals/?$ index.php?section=deals&page=1 [L] RewriteRule ^freebies/([0-9]+)/?$ index.php?section=freebies&page=$1 [NC,L] RewriteRule ^articles/([0-9]+)/?$ index.php?section=articles&page=$1 [NC,L] RewriteRule ^deals/([0-9]+)/?$ index.php?section=deals&page=$1 [NC,L]
freebies
semblent être un vrai répertoire et le module mod_dir
d’Apache ajoute une barre oblique aux répertoires, ce qui provoque une redirection, exposant ainsi votre URL interne aux clients.
Vous pouvez utiliser:
RewriteEngine On # internally add a trailing slash to directories RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L] RewriteRule ^([0-9]+)/?$ index.php?section=index&page=$1 [NC,L,QSA] RewriteRule ^freebies/?$ index.php?section=freebies&page=1 [L,NC,QSA] RewriteRule ^articles/?$ index.php?section=articles&page=1 [L,NC,QSA] RewriteRule ^deals/?$ index.php?section=deals&page=1 [L,QSA,NC] RewriteRule ^freebies/([0-9]+)/?$ index.php?section=freebies&page=$1 [NC,L,QSA] RewriteRule ^articles/([0-9]+)/?$ index.php?section=articles&page=$1 [NC,L,QSA] RewriteRule ^deals/([0-9]+)/?$ index.php?section=deals&page=$1 [NC,L,QSA]
Si je comprends bien, vous avez toujours besoin de la barre oblique pour que vos règles fonctionnent toujours.
Si tel est le cas, alors au-dessus de vos règles existantes, ajoutez ceci:
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301]
Ou, si cela ne fonctionne pas pour vous, vérifiez d’autres techniques pour append une barre oblique.
Pointe latérale:
Vos règles de jeu existantes
RewriteRule ^freebies/?$ index.php?section=freebies&page=1 [L] RewriteRule ^articles/?$ index.php?section=articles&page=1 [L] RewriteRule ^deals/?$ index.php?section=deals&page=1 [L]
Peut être simplifié par une seule règle:
RewriteRule ^(freebies|articles|deals)/?$ index.php?section=$1&page=1 [L]
MODIFIER:
Il est possible de faire ce que vous demandez (travailler avec slash et sans slash). Je pense que quelque chose comme ça fera l’affaire (non testé):
RewriteRule ^freebies/?$ index.php?section=freebies&page=1
(notez le? après la barre oblique)
Lisez également https://webmasters.googleblog.com/2010/04/to-slash-or-not-to-slash.html ) pour vérifier comment le G traite ces scénarios.