2009-08-28 2 views
0

Compte tenu des règles suivantes, comment puis-je les réécrire pour avoir une barre oblique finale? Je dois mentionner que je ne peux éditer que le fichier .htaccess, donc je n'ai pas d'accès pour modifier les URL sur le site.Résolution d'un problème de barre oblique à la fin d'une installation donnée

RewriteRule ^artists/(.*)-p(.*)$ /artists.php?l=$1&p=$2 [QSA,L] 
RewriteRule ^artists/(.*)$ /artists.php?l=$1 [QSA,L] 
RewriteRule ^lyrics/(.*)/(.*)$ /artists-albums.php?a=$1&b=$2 [QSA,L] 
RewriteRule ^lyrics/(.*)$ /artists-details.php?a=$1 [QSA,L] 
RewriteRule ^p-(.*)-(.*)$ /index.php?p=$1&q=$2 [QSA,L] 

Donc, si quelqu'un est à la recherche /lyrics/abba il doit rediriger automatiquement vers /lyrics/abba/.

Répondre

0

Ajouter une autre règle de réécrire des choses qui ne se terminent pas par une barre oblique, avant les autres règles:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*[^/])$ $1/ [L,R=301] 

(peut-être que je foireuse l'expression rationnelle exacte sur celui-là, mais vous voyez l'idée.)

0

Essayez cette règle devant vos autres règles:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond $0 !.*\.php$ 
RewriteRule .*[^/]$ /$0/ [L,R=301] 

Mais vous devez également modifier vos règles existantes en remplaçant .* avec au moins .+ ou mieux [^/]+:

RewriteRule ^artists/([^/-]+)-p([^/]+)$ /artists.php?l=$1&p=$2 [QSA,L] 
RewriteRule ^artists/([^/]+)$ /artists.php?l=$1 [QSA,L] 
RewriteRule ^lyrics/([^/]+)/([^/]+)$ /artists-albums.php?a=$1&b=$2 [QSA,L] 
RewriteRule ^lyrics/([^/]+)$ /artists-details.php?a=$1 [QSA,L] 
RewriteRule ^p-([^/-]+)-([^/]+)$ /index.php?p=$1&q=$2 [QSA,L] 

Si possible, utilisez modèle encore plus précis ([0-9]+ pour les numéros, [1-9][0-9]* pour les numéros sans 0, etc.).

+0

C'est presque ce que je veux, mais j'ai quelques règles pour lesquelles je ne veux pas de slash final. Par exemple celui-ci: RewriteRule^lyrics /(.*)/(.*). Php /artists-lyrics.php?a=$1&c=$2 [QSA, L] Aussi, pour cette règle RewriteRule^artists/(. *) $ /artists.php?l=$1 [QSA, L] quand il obtient la valeur de "l" dans PHP il a la barre oblique de fin. Comme si la valeur est "a", en PHP ce sera "a /". – Psyche

+0

Ensuite, il suffit de mettre la règle de réécriture pour la barre oblique finale * après * les règles que vous ne voulez pas affecter, et * avant * les règles que vous faites. – Amber

+0

@Gumbo, j'ai fait tous les changements ci-dessus, mais maintenant il redirige vers 404.shtml disant "La page ne redirige pas correctement". – Psyche