.htaccess fonctionnant à moitié

Nouveau WRInaute
Bonjour à tous,

Je rencontre un soucis avec un .htaccess, il fonctionne à moitié :( Ce que je souhaite faire c'est réécrire l'adresse des pages de résultat de recherche. J'ai donc mon fichier index.php qui fait appel à la variable search index.php?search= et j'aimerais réécrire tout ça sous la forme index/file-$valeurdesearch.html

Voici mon code
Code:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteRule ^index/file-([0-9a-zA-Z-]+)\.html$ http://www.mon-site.fr/index.php?search=$1

Voyez vous d'où cela peut venir ?

Quand je dis qu'il fonctionne à moitié c'est parceque les 3 premières lignes (qui servent à éviter que l'adresse du site soit affiché sans les www) fonctionnent impec...

Merci d'avance pour votre aide.
 
WRInaute impliqué
Essaie d'enlever le ^ au début (ou alors met RewriteBase /) :

Code:
RewriteRule index/file-([0-9a-zA-Z-]+)\.html$ http://www.mon-site.fr/index.php?search=$1
 
Nouveau WRInaute
Merci pour ta réponse !

ça ne fonctionne toujours pas.. :x
J'ai testé avec
Code:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteRule ^index/file-([0-9a-zA-Z-]+)\.html$ http://www.mon-site.fr/index.php?search=$1
et avec
Code:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteRule index/file-([0-9a-zA-Z-]+)\.html$ http://www.mon-site.fr/index.php?search=$1

Une autre idée ?
(Qu'est ce que ça peut être capricieux ces .htaccess...)
 
WRInaute passionné
Quelle est le problème ou l'erreur rencontrée ?

essaie ça :
Code:
RewriteRule ^index/file-([0-9a-zA-Z-]+)\.html$ index.php?search=$1
 
Nouveau WRInaute
Quand je dis que ça ne fonctionne pas c'est que ça fonctionne à moitié (cf 1°mess) et je n'ai pas d'erreur... à la limite je préfèrerai en avoir une mais la rien... l'adresse s'écrit encore et toujours www.mon-site.fr/index.php?search=requete :(

J'ai testé avec le / devant index soit

Code:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteRule ^/index/file-([0-9a-zA-Z-]+)\.html$ http://www.mon-site.fr/index.php?search=$1
Kifkif...

et avec
Code:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteRule ^/index/file-([0-9a-zA-Z-]+)\.html$ index.php?search=$1
et re-kifkif :cry:
 
WRInaute impliqué
weedo a dit:
Quand je dis que ça ne fonctionne pas c'est que ça fonctionne à moitié (cf 1°mess) et je n'ai pas d'erreur... à la limite je préfèrerai en avoir une mais la rien... l'adresse s'écrit encore et toujours www.mon-site.fr/index.php.search=requete :(

C'est normal! Tu as parlé de récriture, pas de redirection...

Ajoute [L,R=301] a la fin de la dernière règle, et dis nous quelle variante(s) marche(nt).
 
Nouveau WRInaute
Je pensais que dans la mesure ou j'aimerais réécrire une adresse du type index.php?search=requete il s'agissait d'url rewriting, car les fichiers index/file-$requete.html n'existent pas... J'ai essayé de rajouter le [L,R=301] ça ne change rien (toutes soluces confondues)... C'est quand même fou ! d'autant que si les premières lignes servant à éviter la disparition des www fonctionnent, c'est bien que le mod_rewrite est activé. Bref, j'y comprend plus grand chose
 
Nouveau WRInaute
jeroen a dit:
As tu essayé ma solution ?
Ton .htaccess est bien à la racine de ton site ?

Oui j'ai testé ta solution et ça ne foncitonne pas, le .htaccess est bien à la racine du site...

et si tu tapes ton adresse "réécrite" directement dans la basse d'adresse ca donne quoi ??

Et bien curieusement ça fonctionne, j'entend par la que je tombe sur la même page qu'avec l'url originale.

Mon code :
Code:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteRule ^index-([0-9a-zA-Z-]+)-([0-9a-zA-Z-]+)\.html$ index.php?$1=$2

Donc pour résumer je tappe la requête test : index.php?search=test j'ai donc ma page de résultats.
Et quand je tape index-search-test.html je tombe sur la même page...

Comment faire pour que quand j'entre "test" dans le formulaire la réécriture fonctionne comme elle devrait... et donc m'afficher dans la barre d'adresse http://www.mon-site.fr/index-search-test.html au lieu de http://www.mon-site.fr/index.php?search=test

Merci beaucoup pour votre aide :)
 
WRInaute passionné
on y est : encore un qui n'a pas compris....
Ta réécriture marche donc, puisque quand tu appelle l'url index-search-test.html ton serveur te renvoie bien l'URL index.php?search=test

Le problème est ailleurs : tu voudrais qu'à la soumission du formulaire ce soit la page index-search-test.html qui soit demandée.

Deux solutions !
1/ Via javascript
2/ Via un test du REQUEST_URI + redirection 301 dans le .htaccess ou dans la page cible du formulaire.

https://www.google.fr/search?q=rewritecond+request_uri
 
WRInaute passionné
et avec ca :
Code:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteCond %{QUERY_STRING} ^search=([^&]+)$
RewriteRule ^ index\.php$ /index/file-%1.html? [R=301,L]
RewriteRule ^index/file-([0-9a-zA-Z-]+)\.html$ /index.php?search=$2&stop
 
WRInaute occasionnel
jeroen a dit:
on y est : encore un qui n'a pas compris....
Ta réécriture marche donc, puisque quand tu appelle l'url index-search-test.html ton serveur te renvoie bien l'URL index.php?search=test

Le problème est ailleurs : tu voudrais qu'à la soumission du formulaire ce soit la page index-search-test.html qui soit demandée.

D

c'est bien pour ça que j'avais posé ma question ;)

c'est un probleme de réécriture mais en interne, dans le script php
 
WRInaute impliqué
capleton59 a dit:
jeroen a dit:
on y est : encore un qui n'a pas compris....
Ta réécriture marche donc, puisque quand tu appelle l'url index-search-test.html ton serveur te renvoie bien l'URL index.php?search=test

Le problème est ailleurs : tu voudrais qu'à la soumission du formulaire ce soit la page index-search-test.html qui soit demandée.

D

c'est bien pour ça que j'avais posé ma question ;)

c'est un probleme de réécriture mais en interne, dans le script php

Non, c'est pas dans le script. Webmasterlamogere a donné une solution qui marche je pense.

Tu veux deux choses :
1) Quand tu tape -http://www.mon-site.fr/index.php?search=test (ou quand on met test dans ton forumlaire), tu veux que le visiteur soit redirigé vers -http://www.mon-site.fr/index-search-test.html
2) tu veux que -http://www.mon-site.fr/index-search-test.html soit interprété par -http://www.mon-site.fr/index.php?search=test

On a tous cru que ta question parlait du deuxième point seulement.
 
Nouveau WRInaute
Merci beaucoup pour toutes vos réponses ! je comprend un peu mieux le bazard :)

webmasterlamogere a dit:
et avec ca :
Code:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteCond %{QUERY_STRING} ^search=([^&]+)$
RewriteRule ^ index\.php$ /index/file-%1.html? [R=301,L]
RewriteRule ^index/file-([0-9a-zA-Z-]+)\.html$ /index.php?search=$2&stop

J'ai une erreur 500 avec ça :( c'est dommage on dirait que c'est bien la solution, à mes deux problèmes donc...

EDIT : C'est bon pour l'erreur 500 juste un espace entre ^ et index\.php mais maintenant dès que ma variable $search contient 2 mots ou + (mot1+mot2...) ça me renvoie une page introuvable et quand ma variable n'est qu'1 mot ça fonctionne (re) à moitié : je tombe bien sur une page mais la recherche n'est pas lancée et je n'ai plus de CSS...

Voyez vous d'où ça peut venir ?
 
WRInaute passionné
désolé car j'ai été trop vite. il y a l'espace en trop et un $2 à la place de $1.
pour prendre en compte tous les caractères tu peux mettre (.+)
pour le CSS, il faut mettre le chemin complet sinon le navigateur le cherche dans le répertoire index
Code:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteCond %{QUERY_STRING} ^search=([^&]+)$
RewriteRule ^index\.php$ /index/file-%1.html? [R=301,L]
RewriteRule ^index/file-(.+)\.html$ /index.php?search=$1&stop
 
Nouveau WRInaute
Merci beaucoup ! ça fonctionne ! :) juste un dernier soucis, j'ai bien mis le chemin de mon fichier CSS en absolu mais les images qui sont définies par l'intermédiaire de ce même fichier ne s'affichent pas... même avec leur chemin en absolu. Comment faire ?
 
WRInaute passionné
weedo a dit:
Merci beaucoup ! ça fonctionne ! :) juste un dernier soucis, j'ai bien mis le chemin de mon fichier CSS en absolu mais les images qui sont définies par l'intermédiaire de ce même fichier ne s'affichent pas... même avec leur chemin en absolu. Comment faire ?
les url dans un fichier css sont relatives au répertoire de ce fichier. il ne doit donc pas y avoir d'impact. sinon mets le chemin complet avec h**p://tonsite.com/....
 
Nouveau WRInaute
Merci infiniment ! :) ça fonctionne impeccable ! Tu es un chef ;)

Comment je fais pour rajouter une variable ? donc $search et $page ?
 
WRInaute passionné
avec ca par exemple :
Code:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteCond %{QUERY_STRING} ^search=([^&]+)&page=([^&]+)$
RewriteRule ^index\.php$ /index/file-%1-page-%2.html? [R=301,L]
RewriteRule ^index/file-(.+)-page-(.+)\.html$ /index.php?search=$1&page=$2&stop
RewriteCond %{QUERY_STRING} ^search=([^&]+)$
RewriteRule ^index\.php$ /index/file-%1.html? [R=301,L]
RewriteRule ^index/file-(.+)\.html$ /index.php?search=$1&stop
 
Nouveau WRInaute
Bonjour à tous,

Je remonte le sujet car j'ai un problème au niveau des ' , quand ma variable contient une apostrophe, tout ce qui suit est tronqué, je tombe donc sur une belle erreur 404.

Voici mon code
Code:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteCond %{QUERY_STRING} ^search=([^&]+)$
RewriteRule ^index\.php$ /recherche/file-%1.html? [R=301,L]
RewriteRule ^recherche/file-(.+)\.html$ /index.php?search=$1&stop
RewriteCond %{QUERY_STRING} ^search=([^&]+)&page=([0-9]+)$
RewriteRule ^index\.php$ /recherche/file-%1.html&page=%2? [R=301,L]
RewriteRule ^recherche/file-(.+)\.html&page=([0-9]+)$ /index.php?search=$1&page=$2&stop

Donc pour résumer : index.php?search=d'avignon fonctionne bien mais pas recherche/file-d'avignon.html qui se transforme en recherche/file-d.html

Comment puis je faire pour y remédier ?

D'avance merci pour votre aide
:)
 
WRInaute impliqué
En changeant la dexuième condition des règles ça devrait passer.

Code:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
RewriteCond %{QUERY_STRING} ^search=([^&]+)$
RewriteRule ^index\.php$ /recherche/file-%1.html? [R=301,L]
RewriteRule ^recherche/file-(.+)\.html$ /index.php?search=$1&stop
RewriteCond %{QUERY_STRING} ^search=([^&]+)&page=([^&]+)$
RewriteRule ^index\.php$ /recherche/file-%1.html&page=%2? [R=301,L]
RewriteRule ^recherche/file-(.+)\.html&page=([^&]+)$ /index.php?search=$1&page=$2&stop
 
WRInaute impliqué
une apostrophe dans une url ne me parait pas une bonne idée de toute façon...

Je remplacerai les apostrophes par des - partout.
 
Nouveau WRInaute
Vap a dit:
une apostrophe dans une url ne me parait pas une bonne idée de toute façon...

Je remplacerai les apostrophes par des - partout.

Le problème c'est qu'il faut quand même qu'elles soient interprétées en tant que tel si je les transforme en - je peut plus les réécrire avec preg_replace et comme c'est pour un tag cloud, de préférence esthétique...
 
Nouveau WRInaute
webmasterlamogere a dit:
il manque surement un urlencode car tu devrais avoir l'url suivante :
recherche/file-d%27avignon.html

Ah... tu as sans doute raison, je vais donc modifier mon code car après avoir regardé ici je vois que cette fonction remplace aussi les espaces par des +, ce que je faisais avec des preg_replace :? :roll:
 
Discussions similaires
Haut