Page 1 sur 1

Htacess avec une redirection au lieu d'une réecriture

Posté : 05 mars 2013, 11:38
par Louigi
Bonjour à tous !

Je souhaite faire une réecriture d'url pour que l'url /voitures/ soit une réecriture de la page voitures.php.
Pour cela, j'ai écrit ces deux lignes sur htaccess :

Code : Tout sélectionner

RewriteEngine on RewriteRule ^voitures/$ http://www.site.com/voitures.php [L]
En tapant "/voitures/", la page mouline et l'adresse se change en voitures.php.
La page s'affiche donc bien mais cela ressemble étrangement à une redirection, avec ce petit temps de chargement et cette adresse qui change sur la barre d'url.
Pourtant, je n'ai rien fait pour que cela soit interprété comme ça..

Auriez-vous une piste ?
Merci d'avance à ce forum !

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 05 mars 2013, 12:43
par Sékiltoyai
Bonjour,

Code : Tout sélectionner

RewriteEngine on RewriteRule ^voitures/$ http://www.site.com/voitures.php [L]
En tapant "/voitures/", la page mouline et l'adresse se change en voitures.php.
La page s'affiche donc bien mais cela ressemble étrangement à une redirection, avec ce petit temps de chargement et cette adresse qui change sur la barre d'url.
Pourtant, je n'ai rien fait pour que cela soit interprété comme ça..
Je corrige: Tu as l'impression de n'avoir rien fait pour que ce soit interprété de cette manière. Pourtant c'est exactement ce que tu lui demandes.
A partir du moment où tu indiques une URL dans la partie réécriture, cela signifie que tu veux une redirection. SI tu veux une réécriture, tu dois donne la cible sous forme de chemin (relatif au contexte courant), donc un truc comme:

Code : Tout sélectionner

RewriteRule ^voitures/$ /voitures.php [L]
Plus d'infos ici: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

Cordialement

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 05 mars 2013, 13:26
par Louigi
C'est exact, au temps pour moi !
Merci pour ta réponse et le lien qui l'accompagne !

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 05 mars 2013, 16:22
par Louigi
Je profite de ce sujet pour une dernière requête, une expression régulière sur laquelle je penche depuis tout à l'heure et qui ne semble pas fonctionner..

Voilà, j'ai des fichiers qui portent tous une structure basique pour les catégories du type :
- voitures-modeles.php?id=1
- motos-modeles.php?id=1
- velos-modeles.php?id=1


L'idée, c'est donc de faire une règle pour transformer tout fichier comportant cette structure afin de la transformer en une autre plus sympathique pour avoir :
- voitures/1.html
- motos/1.html
- velos/1.html


Pour ce faire, j'ai tenté ceci :

Code : Tout sélectionner

RewriteRule ^([a-zA-Z]*)-[0-9]\-\.html(.*)$ /$1-1.php?id=$2 [L]
Qu'en pensez-vous ?
En faisant cela, et en tapant "motos/1.html", le serveur m'indique que l'url n'existe pas..
Merci d'avance !

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 06 mars 2013, 09:21
par Louigi
Je voulais dire :
RewriteRule ^([a-zA-Z]*)-[0-9]\-\.html(.*)$ /$1-modeles.php?id=$2 [L]

Merci d'avance à vous, j'ai pourtant cherché toute la soirée... :s

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 06 mars 2013, 11:20
par Nagol
Un sujet = un problème, le but du forum est d'offrir de la connaissance, quand quelqu'un a un problème il est très courant que ce problème ait déjà été rencontré, il serait préférable de démarrer un nouveau topic.

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 25 avr. 2013, 11:57
par boita

Code : Tout sélectionner

RewriteRule ^voitures/$ /voitures.php [L]
bonjour,
Si ce code ne marche toujours pas cela peux provenir de quoi?
voila mon code je suis chez ovh mais c'est le serveur de l’école donc aucun droit admis

Code : Tout sélectionner

RewriteEngine on RewriteRule ^/index/$ /index.php [L]
merci de votre réponse.

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 25 avr. 2013, 14:13
par Sékiltoyai

Code : Tout sélectionner

RewriteRule ^voitures/$ /voitures.php [L]
bonjour,
Si ce code ne marche toujours pas cela peux provenir de quoi?
voila mon code je suis chez ovh mais c'est le serveur de l’école donc aucun droit admis

Code : Tout sélectionner

RewriteEngine on RewriteRule ^/index/$ /index.php [L]
merci de votre réponse.
Qu'est ce que cela veut dire "ne marche pas" ?
Y a-t-il une erreur 500 ? Est-ce que la redirection ne se fait pas et amène vers la page initiale ?

Cela peut être au choix:
* le mod_rewrite qui n'est pas installé/activé
* le droit d'utiliser la réécriture d'url n'a pas été délégué (AllowOverride FileInfo)

Cordialement

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 25 avr. 2013, 14:54
par boita
il ne charge pas ma page index.php il dis juste index existe pas

Code : Tout sélectionner

RewriteEngine on RewriteRule ^index$ index.php [L]
http://ns366377.ovh.net/.../.../index
il repond : The requested URL /.../.../index was not found on this server.
http://ns366377.ovh.net/.../.../index.php
ca marche

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 25 avr. 2013, 15:09
par Sékiltoyai
il ne charge pas ma page index.php il dis juste index existe pas

Code : Tout sélectionner

RewriteEngine on RewriteRule ^index$ index.php [L]
Soyons précis, est-ce que tu utilises:

Code : Tout sélectionner

RewriteRule ^index$ index.php [L]
Ou bien:

Code : Tout sélectionner

RewriteRule ^/index/$ index.php [L]
Ce n'est pas la même chose. En l'occurrence je ne pense pas que le premier matche.

Cordialement

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 25 avr. 2013, 15:15
par boita
j’utilisai la première je viens de tester celle que tu viens de me donner, exactement la même erreur.

http://ns366377.ovh.net/.../.../index
The requested URL /.../.../index was not found on this server.

quand je met ce code

Code : Tout sélectionner

RewriteRule ^index\.html$ index.php [L]
http://ns366377.ovh.net/.../.../index.html
il me repond : The requested URL /home/.../www/.../index.php was not found on this server.

Code : Tout sélectionner

RewriteRule ^/index/\.html$ index.php [L]
http://ns366377.ovh.net/.../.../index.html
The requested URL /.../.../index.html was not found on this server.

Cordialement

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 25 avr. 2013, 15:48
par Sékiltoyai
j’utilisai la première je viens de tester celle que tu viens de me donner, exactement la même erreur.

http://ns366377.ovh.net/.../.../index
The requested URL /.../.../index was not found on this server.

quand je met ce code

Code : Tout sélectionner

RewriteRule ^index\.html$ index.php [L]
http://ns366377.ovh.net/.../.../index.html
il me repond : The requested URL /home/.../www/.../index.php was not found on this server.

Code : Tout sélectionner

RewriteRule ^/index/\.html$ index.php [L]
http://ns366377.ovh.net/.../.../index.html
The requested URL /.../.../index.html was not found on this server.

Cordialement
Encore deux nouvelles formes, qui ne veulent pas dire la même chose que les formes précédentes.
Avant que nous puissions aider, il faut être précis dans la question:
* Quelle est la configuration actuelle ?
* Qu'est-ce que cela devrait faire ? Ou quel est le comportement que tu cherches à avoir par cette configuration ?
* Qu'est-ce que cela fait en réalité ?
Tu as posté quatre règles différentes (qui ont toutes une sémantique différente).Ce n'est pas en postant à chaque fois des tests qui ne fonctionnent pas que l'on va réussir à comprendre ce quel est le comportement voulu.

Bref, un peu de rigueur serait bienvenue dans la question posée, sans quoi on ne pourra pas répondre.

Merci !

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 25 avr. 2013, 16:00
par boita
ce que je voudrai c'est quand je tape
http://ns366377.ovh.net/.../.../index
c'est la page
http://ns366377.ovh.net/.../.../index.php
qui s'affiche tout en gardent cette url 'http://ns366377.ovh.net/.../.../index' affiché dans la barre d'url

tous les code d'avant c’était pour teste ce qui allé pas

Re: Htacess avec une redirection au lieu d'une réecriture

Posté : 25 avr. 2013, 16:26
par Sékiltoyai
ce que je voudrais c'est quand je tape
http://ns366377.ovh.net/.../.../index
c'est la page
http://ns366377.ovh.net/.../.../index.php
qui s'affiche tout en gardent cette url 'http://ns366377.ovh.net/.../.../index' affiché dans la barre d'url
Ok, je vois.
Alors la réécriture qu'il faut c'est:

Code : Tout sélectionner

RewriteRule ^/index$ /index.php [L]
Qui signifie:
"^" => Ancrer le début de la chaine
"/index" => Matcher la chaine "/index"
"$" => Ancrer la fin de la chaine

"/index.php" => Réécrire par "/index.php"
Si ton .htaccess est dans le même dossier que le fichier index.php, la chaine de base que Apache va essayer de matcher lorsque tu fais une requête "http://ns366377.ovh.net/.../.../index" est celle ci: "/index"
Le fait est que dans tes réécritures tu utilises les caractères d'ancrage, et dans ce cas il faut être très rigoureux.

Pour expliquer par l'exemple le fonctionnement de ces caractères.
Si tu utilises ce match: "^/index", cela ne fonctionnera que si la chaine à matcher commence par "/index".
Si tu utilises ce match: "/index" (sans le caractère d'ancrage), tu peux matcher n'importe quelle chaine qui contient "/index", par exemple: "/mon_dossier/index/mon_sous_dossier/".

Dans notre cas on veut être très strict et on utilise donc ces caractères (la réécriture ne marchera que pour l'url "http://ns366377.ovh.net/.../.../index").

Enfin, dans certains des exemples tu essayais de matcher "/index/" alors que l'url est "http://ns366377.ovh.net/.../.../index" (sans le slash final). Bref, il faut faire très attention à ce que apache va essayer de traiter, et au besoin activer le log de réécriture: http://httpd.apache.org/docs/2.2/mod/mo ... rewritelog

En espérant que cela va résoudre le problème.
Cordialement