Voici mon code htaccess:
RewriteEngine On RewriteRule ^ s /(.*)/(.*) /index.php?search=$1&category=$2 [L, QSA] RewriteCond% {QUERY_STRING} ^ recherche = ([A-Za-z0-9 \ +] +) $ RewriteRule ^ (. *) $ / S /% 1 /? [R = 301, L] RewriteCond% {QUERY_STRING} ^ recherche = ([A-Za-z0-9 \ +] +) & category = ([A-Za-z0-9 \ +] +) $ RewriteRule ^ (. *) $ / S /% 1 /% 2 /? [R = 301, L]
Je dois faire une règle de réécriture comme celle-ci:
http://mywebsite.com/s/query+term => http://mywebsite.com/?search=query+term OU s'il y a une catégorie http://www.mywebsite.com/s/query+term/Category => http://mywebsite.com/?search=query+term&category=Category
Je dois également redirect toutes les anciennes URL vers la nouvelle.
Avec cette règle, tout ce que je peux obtenir, c’est de joindre le terme de recherche et le nom de la catégorie. En un mot, c’est comme si j’avais toujours:
http://mywebsite.com/?search=query+term/Category
Si je supprime toutes les conditions (RewriteCond), ne laissant que la règle de réécriture avec l’ajout d’une barre oblique:
RewriteEngine On RewriteRule ^ s /(.*)/(.*)/ /index.php?search=$1&category=$2 [L, QSA]
Atteindre l’url de mon intérêt de manière directe, tout fonctionne. Mais je n’aurai pas la redirection ..
J’ai donc essayé de définir une règle comme celle-ci:
RewriteEngine On RewriteRule ^ s /(.*)/(.*)/ /index.php?search=$1&category=$2 [L, QSA] RewriteCond% {QUERY_STRING} ^ recherche = ([A-Za-z0-9 \ +] +) $ RewriteRule ^ (. *) $ / S /% 1 /? [R = 301, L] RewriteCond% {QUERY_STRING} ^ recherche = ([A-Za-z0-9 \ +] +) & category = ([A-Za-z0-9 \ +] +) $ RewriteRule ^ (. *) $ / S /% 1 /% 2 /? [R = 301, L]
Mais avec cette règle, je reçois juste une boucle de redirections.
Vous pouvez utiliser les règles suivantes:
RewriteEngine on #1--Redirect from "?search=foobar&cat=cat" to "/s/foobar/cat" --# RewriteCond %{THE_REQUEST} /\?search=([^&]+)&cat=([^\s]+) [NC] RewriteRule ^ /s/%1/%/%2? [NC,L,R] #2--Redirect from "/?search=foobar" to "/s/foobar" --# RewriteCond %{THE_REQUEST} /\?search=([^/\s]+) [NC] RewriteRule ^ /s/%1? [NC,L,R] #1--Rewrite "s/foobar/cat" to "/?search=foobar&cat=cat"--# RewriteRule ^s/([^/]+)/([^/]+)/?$ /?search=$1&$category=$2 [NC,L] #2--Rewrite "s/foobar" to "/?search=foobar"--# RewriteRule ^s/([^/]+)/?$ /?search=$1 [NC,L]