J’essaie de réécrire les URL sur mon site (pour améliorer le référencement, c’est un site AJAX) pour qu’elles passent de
http://www.domain.co.uk/?section=home
http://www.domain.co.uk/?section=contact
à
http://www.domain.co.uk/home
http://www.domain.co.uk/contact
respectivement.
C’est la première fois que j’utilise .htaccess pour la réécriture, et je trouve que je finis par deviner mes expressions / copier des réponses à d’autres questions et essayer de les faire fonctionner.
Le plus proche que j’ai eu est d’adapter cette réponse ici
RewriteEngine on RewriteCond %{THE_REQUEST} ^GET\ /\?(([^&\s]*&)*)section=([^&\s]+)&?([^\s]*) RewriteRule ^(.*)$ /section/%3?%1%4 [L,R=301] RewriteRule ^section/(.*) index.php?section=$1 [L]
ce qui me donne le résultat
http://www.domain.co.uk/section/contact
Cependant, cela brise également tous mes autres liens et quitte le site sans CSS ou javascript, etc.
En outre, l’une des sections de mon site contient des URL qui ressemblent à ceci:
http://www.domain.co.uk/?section=blog&post=post-name-one
http://www.domain.co.uk/?section=blog&post=post-name-two
que je voulais réécrire pour
http://www.domain.co.uk/blog/post-name-one
http://www.domain.co.uk/blog/post-name-two
Cependant, je ne suis pas sûr de savoir comment aborder cela dans RegEx.
Quelqu’un pourrait-il aider à obtenir ce droit? S’il y a de bonnes références pour la rédaction de ces règles, je serais heureux de les entendre également. Jusqu’à présent, les choses que j’ai lues ont été utiles pour expliquer ce qui se passe, mais je n’ai pas encore pu écrire le mien.
Vous pouvez utiliser ces règles dans votre racine .htaccess:
RewriteEngine on RewriteCond %{THE_REQUEST} \s/+\?section=([^\s&]+)&post=([^\s&]+) [NC] RewriteRule ^ /%1/%2? [R=302,L] RewriteCond %{THE_REQUEST} \s/+\?section=([^\s&]+) [NC] RewriteRule ^ /%1? [R=302,L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteRule ^([^/]+)/([^/]+)/?$ /?section=$1&post=$2 [L,QSA] RewriteRule ^([^/]+)/?$ /?section=$1 [L,QSA]