Pratique de Htaccess : à lire avant de poser

WRInaute discret
Bonjour
j'ai regarder que la plupart des topic sont des question que en'a déjà réponde

pour cela j'ai lancer ce topic ( et j'excuse pour l'orthographe :mrgreen: )



Pratique de Htacess :

Bonjour

avant de poser une question merci de lire ce topic : ( redirection ancien page vers nouvelle page, redirection nom de domaine vers autre, site sans www. vers site avec www ..... )

https://www.webrankinfo.com/forum/t/des-codes-pour-la-redirection-htaccess.110832/



//// des explications :

\ Annule le meta-sens du meta-caractère qui suit
^ Reconnaît le debut de la ligne
. Reconnaît n'importe quel caractère (sauf le caractère nouvelle ligne)
$ Reconnaît la fin de la ligne (ou juste avant le caractère nouvelle ligne final)
| Alternative
() Groupement
[] Classe de caractères


* Reconnaît 0 fois ou plus
+ Reconnaît 1 fois ou plus
? Reconnaît 0 ou 1 fois
{n} Reconnaît n fois exactement
{n,} Reconnaît au moins n fois
{n,m} Reconnaît au moins n fois mais pas plus de m fois

( exemple : ([0-9]{1,2}) Autorise un ou deux chiffres
([0-9]*) Autorise tous les chiffres
(([a-z]|-)*) Autorise toutes les lettres et tirets
([A-Z]+) au moins une caractère Majuscule
(.*) toutes les chiffre et les caractères
([0-9]+)([a-z]) : au moins un chiffre après n caractère ( n de 0 à l'infini )

.......

)



*************************

pour nettoyer les url en php voila la fonction : ( remplacer é par e , espace par - ........)

Code:
function nettoyage($text)
{
   $separator = "-";
   $tofind = "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ"; // Lettre accentuées
   $replac = "aaaaaaooooooeeeeciiiiuuuuyn"; // Equivalent non accentué
   $text = strtr(strtolower($text),$tofind,$replac);
   $text = ereg_replace("[^a-z0-9.]", $separator, $text);
   while (strstr($text, $separator . $separator))
      $text = str_replace($separator . $separator, $separator, $text);
   if (substr($text, 0, 1) == $separator)
      $text = substr($text, 1);
   return(ereg_replace($separator . "$", "", $text));
}

*****************************


par ( polyptote ) ,
Bonjour,
J'ai besoin de rediriger d'anciennes URL, suite à un changement de forum.
Ce qui produisait des URL comme celles-ci :
-http://example.net/forum/sujet-777

Mes nouvelles URL sont formées ainsi :
-http://example.net/forum/topic777

>>> Solution :

Code:
RedirectMatch permanent /forum/sujet(.*) http://www.example.net/forum/topic$1



******************************

Par caviar :

je voudrai faire des règles simples

1 - si l'url après le ndd contient cat- alors je redirige vers page=accueil&idcat=$1
2 - si l'url après le ndd contient commentaires- alors je redirige vers page=addcomments&id=$1


>> solution :

Code:
RewriteRule ^cat-(.*)$ index.php?page=accueil&idcat=$1 [L,NC]
RewriteRule ^commentaires-(.*)$ index.php?page=addcomments&id=$1 [L,NC]



*******************************

par monbototo
j'aimerai rediriger http://www.anciensite.com vers http://www.nouveausite.com de façon permanente, mais sauf le dossier "wanewsletter" ainsi que tous les sous-dossiers et fichiers qu'il contient.


>> solution :

Code:
RewriteCond %{REQUEST_URI} !wanewsletter/(.*)$
RewriteRule (.*) http://www.nouveausite.com/$1 [QSA,R=301,L]


***********************

par moi :

Toutes tes pages en ...index.php5?title=quelquechose seront redirigé en 301 (redirection permanente et définitive) vers les pages .../quelquechose.


>>solution :

Code:
 RewriteRule ^index.php5?title=([a-zA-Z0-9]+) /$1 [R=301]



**************************

par sebrem :

Est-il possible de modifier une url du type :
http://www.monsite.com/collection/fiche.php?millesime=2010&id=123
en :
http://www.monsite.com/collection-2010/fiche-123.html

>> solution ( à mettre dans le racine , par Rod la Kox )

Code:
RewriteRule ^collection-([0-9]+)/fiche-([0-9]+)\.html$ /collection/fiche.php?millesime=$1&id=$2

****************************

Par pointb :

Je souhaite rediriger l'url http://www.exemple.com/fr vers http://fr.exemple.com (et que ça soit visible dans la barre d'adresse) ainsi que tout ce que contient /fr

>> solution

Code:
Redirect permanent /fr http://fr.exemple.com


******************************************

Je voudrais via le htaccess réecrute
http://www.example.com/products.php?cat=10
vers
http://www.example.com/le-produit-numero-10.

>> solution

Code:
RewriteRule products.php?cat=([0-9]+) /produit-$1 [R=301]


***************************************


j'ajoute dans ce topic les problème qui sont résolu

Bonne journée
 
Membre Honoré
Re: Pratique de Htacess : à lire avant de poser

Merci Mahdivitcheev pour ce tutoriel concernant la pratique de l'Htaccess. :)

Par contre il faudrait corriger le titre du topic :
"Pratique de Htacess : à lire avant de poser"
au lieu de :
"Pratique de Htaccess : à lire avant de poser"
merci. :mrgreen:
 
WRInaute discret
Merci beaucoup je voulais me plonger la dedans depuis un moment. Les deux sujets sont vraiment très utiles.
Par contre serait-il possible d'y ajouter ce que signifie par exemple
Options +FollowSymlinks et surtout ce genre de choses : [R=301,NC,L] ?
 
WRInaute discret
Bonjour Idefix

si pas facile de t'explique ça surtout avec mon français :mrgreen:
mais voila j'ai fait un petit recherche dans le net :wink:

Rewrite

( source : ****http://www.nospheratus.com/linux/apache/rewrite.php)
voila un petit résumé
-----------------------------------------------------------------

RewriteEngine :
Syntax: RewriteEngine on|off
Default: RewriteEngine off
La directive RewriteEngine active ou désactive le moteur de réécriture. Si elle est à OFF alors il n'y a pas de réécriture.


RewriteCond : (plus d'info dans le site dessus )
Syntax: RewriteCond Chainetesté Condition
Default: Aucun
La directive RewriteCond définit un condition dans une règle de réécriture.

* 'nocase|NC' (no case) - retire le case sensitive
* 'ornext|OR' (or next condition) - permet la combinaison de deux conditions avec un OR (ou) :

Exemple : >>> Pour afficher une page d'accueil en fonction du navigateur de l'internaute :
Code:
 RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /homepage.mozilla.html [L]
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule ^/$ /homepage.text.html [L]
RewriteRule ^/$ /homepage.autres.html [L]


et le plus important :

RewriteRule :
Syntax: RewriteRule Pattern Substitution
Default: Aucun

La RewriteRule est une directive de réécriture assez brutale. Cette directive passe avant tout autre script. Chaques directive définit une seule règle de réécriture. L'ordre de définition de ces règles est important, car si la dernière est cachée par la première alors celle-ci ne s'appliquera pas.

>>> flags :

--- 'redirect|R [=code]' (force redirect) : pour forcer une redirection externe
--- 'last|L' (last rule) : Arrête le processus de réécriture.
--- 'nocase|NC' (no case) : Supprime le case-insensitive
les autres flags dans le site :wink:


qu'il que exemple dans le net :

voila qu'il code utile :

>> Code pour sécuriser un site contre les hacker
Code:
RewriteCond %{QUERY_STRING} ^(.*&)?error=http://
RewriteRule ^(.*/)?errors.php - [F,L]

>> Redirection en gardent l'url origine
Code:
RewriteEngine On
RewriteRule ^(.*)$ http://www.domaine2.com/$1 [P]

#virtual host
<VirtualHost ip:port>
ServerName domaine1.com
ProxyPass / http://www.domaine2.com/
</VirtualHost>

>> Redirige tout un répertoire vers sous domaine
Code:
RewriteEngine on
RewriteRule ^forum/(.*)$ http://forum.example.com/$1 [QSA,R=301,L]

>> Faire une réécriture ou une redirection que si le fichier n'existe pas
Code:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ...

Bonne journée
 
WRInaute accro
Je me demande toujours pourquoi les gens s'attardent avec l'URL Rewriting alors qu'un simple explode() de $_SERVER['PATH_INFO'] ou d'un $_GET['url'] pourrait faire l'affaire.
(Pour un script tout fait, OK je comprend, mais pour du développement maison...)

PATH_INFO:
Code:
www.example.com/index.php/module/action/param1/param2
_GET:
Code:
www.example.com/index.php?url=/module/action/param1/param2

Il n'y a besoin que de quelques lignes simples de rewrite pour ces 2 solutions pour transformer en URLs user/seo friendly:
Ex avec PATH_INFO:
Code:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php/$1 [L,QSA]
http://www.example.com/module/action/param1/param2

Et tous les traitements en PHP:
Code:
<?php 
list(, $module, $action, $param1, $param2) = explode('/',$_SERVER['PATH_INFO']);//Ou $_GET['url']
?>

Si le rewrite était absent, ces 2 solutions en non rewritées ne posent pas de problème non plus.
 
WRInaute impliqué
Je trouve la fonction censée nettoyer le code, complètement inutile et mal conçu.
Rappel :
Code:
    function nettoyage($text)
    {
       $separator = "-";
       $tofind = "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ"; // Lettre accentuées
       $replac = "aaaaaaooooooeeeeciiiiuuuuyn"; // Equivalent non accentué
       $text = strtr(strtolower($text),$tofind,$replac);
       $text = ereg_replace("[^a-z0-9.]", $separator, $text);
       while (strstr($text, $separator . $separator))
          $text = str_replace($separator . $separator, $separator, $text);
       if (substr($text, 0, 1) == $separator)
          $text = substr($text, 1);
       return(ereg_replace($separator . "$", "", $text));
    }

* fonction non compatible avec UTF-8.
* je remplacerai la boucle "while" et la condition (if) suivante par un "preg_replace" et un "trim"
* le "ereg_replace" sera compris dans le "trim".

Bref. Pour supprimer les accents d'une chaîne de caractères, il est préférable d'utiliser la fonction "iconv". J'ai d'ailleurs écris un article au sujet de la suppression des accents avec iconv.
 
WRInaute occasionnel
coool merci pour le résumé
une ptite reco en prime pour le sujet intéressant.

ne t'en fait pas pour ton français il va très bien... surtout mieux que nous si on devait parler dans ta langue.
++elembius
 
Nouveau WRInaute
SVP aidez moi
comment on fait du urlrewriting ??

je voudrai reecrire l'url www.monsite.com/presentation.php en www.monsite.com/prestation-de-service/presentation.php

Voici ce que j'ai fais dans mon htaccess ( la redirection marche, mais les images du site et le fichier css ne s'affichent plus ) :

# fichier .htaccess
Options FollowSymLinks
RewriteEngine on
RewriteRule ^prestation-de-service/css/all.css$ css/all.css [L]
RewriteRule ^/images/.*$ images/.* [L]
RewriteRule ^prestation-de-service/presentation.php$ presentation.php [L]

L'arborescence du site est comme suit :
presentation.php
-> css -> all.css
-> images -> tous les fichiers images

Merci d'avance
 
Nouveau WRInaute
spout a dit:
http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/

Salut !

Je repars sur une réécriture via PATH_INFO qui me semble très cool, le pb est que je n'arrive pas à faire générer la variable par Apache (wampserver 2.2)... un coup de main serait le bien venu ..

Merci d'avance

Sébastien
 
WRInaute accro
J'ai fais un tuto plus complet, il y a d'autres techniques si PATH_INFO fonctionne pas:
-http://goo.gl/Vnkh1
 
Nouveau WRInaute
Bonjour,

Merci pour ces différentes pratiques, cependant je ne trouve pas ce que je recherche ! J'ai besoin de rediriger un trafic géolocalisé.

En gros j'ai des sites étrangers qui génèrent du trafic français et j'aimerai détecter le trafic fr puis le rediriger sur une url France (sous forme d'un fichier htaccess)

On m'a donné ca mais ca ne fonctionne pas...

RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^FR$
RewriteRule ^(.*)$ http://www.url.fr$1 [R,L]

Merci d'avance pour votre aide,
David
 
WRInaute discret
Bonsoir,
Une fonction très efficace pour le rewrite: 8)

Code:
function rewrite_url( $url, $type = '' ) {
	$url = preg_replace("`\[.*\]`U","",$url);
	$url = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$url);
	$url = htmlentities($url, ENT_NOQUOTES, 'utf-8');
	$url = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i","\\1", $url );
	$url = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $url);
	$url = ( $url == "" ) ? $type : strtolower(trim($url, '-'));
	$url = preg_replace('/---/U', '-', $url);
	$url = preg_replace('/--/U', '-', $url);
return $url;
}
 
Nouveau WRInaute
Bonsoir,

Je viens de lire cette page qui m'a l'air bien pratique mais je ne sais pas si cela répond à mon problème alors je viens vers
vous pour trouver une solution.
J'ai créée un site avec Web Acappella et celui-ci est hébergé sur ovh. En haut dans ma barre d'adresse, ce trouve le nom de mon site sous cette forme http://leschantiersdelajeunessefrancaiseamcjf.com/index.html
Ma première question est où se trouve mon http:// alors que lorsque je fais un copier/coller il ressort.
Ma deuxième question est, comment faire pour supprimer sur mes pages /index.html. et ne laisser que .com.

Merci d'avance de me permettre d'y voir un peu plus claire.
 
WRInaute discret
Bonjour web83

Ma première question est où se trouve mon http:// alors que lorsque je fais un copier/coller il ressort.

C'est de navigateur :mrgreen:

Ma deuxième question est, comment faire pour supprimer sur mes pages /index.html. et ne laisser que .com.

C'est simple ajouter ce code dans ton fichier htaccess

Code:
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ (/.*)?/index.(htm|html|php|asp|shtml)
RewriteRule ^(.*)index.(htm|html|php|asp|shtml)$ /$1 [R=301,L]


Lire aussi ce topic : https://www.webrankinfo.com/forum/t/des-codes-pour-la-redirection-htaccess.110832/


@+
 
Discussions similaires
Haut