Je cherche un moyen pour rediriger, sur mon hébergement OVH 90Plan toute requête (http://www.domaine.tld/*) vers le dossier “/www/site/*” sauf http://www.domaine.tld/admin/ qu’il faut rediriger vers le dossier “/www/backoffice/*”.
Pour le backoffice (l’administration) j’ai la règle :
Par contre, pour le côté client du site (que l’URL http://www.domaine.tld fasse tomber sur “/www/”) :
RewriteRule ^(.*)$ /site/$1 [L,NC,QSA,NS]
(voire sans les “^” et “$”)
Ne fonctionne pas (j’obtiens une erreur HTTP 500).
La règle RewriteRule ^$ /site/ [L,NC,QSA,NS] fonctionnerait mais par contre, je n’arrive pas à rajouter des parenthèses englobante (pour capturer la suite de l’URL et la recoller après “/site/”
Je précise que je n’ai pas de RewriteBase
Mon .htaccess est dans “/www/” (et il n’y en a pas dans “/”)
Vous auriez une solution ?
Si en plus vous sauriez comment faire pour que je puisse déplacer mes données hors du dossier “/www/” (mettre dans “/machin/”) faire pointer “http://www.domaine.tld/” vers “/machin/site/” et “http://www.domaine.tld/backoffice/” vers “/machin/backoffice/” ça serait bien
Edité le 15/06/2008 à 13:03
Heu si tu as accès à la conf Apache (et pas htaccess), pourquoi tu ne fais pas un alias directement? Ca t’évite de te faire chier avec mod_rewrite, hein
genre:
Alias /admin /www/backoffice
<Directory /www/backoffice>
Order allow,deny
Allow from all
</Directory>
Je suis d’accord, mais si tu appliques la règle suivante, tu as toujours une erreur?
RewriteRule (.*) /site/
Edit : J’avais pas lu le message de Sans-Nom. Juste, le dollar en fin de masque il doit pas être utilisé forcément avec l’accent circonflexe?
“RewriteRule (.*)?$ /site$0 [L,NC,QSA,NS]”
Edité le 15/06/2008 à 13:12
Oui, et je ne savais pas qu’on pouvait indiquer la fin sans préciser le début, je croyais que c’était pas obligatoire, mais que si on mettait l’un, fallait mettre l’autre. Autant pour moi.
:non: Du moins pas pour les ? et les & sûr, pour les autres j’ai jamais testé mais je dirais que ça ne gène pas. L’UR s’applique à la requête URL, donc à l’appel du fichier, pour gérer les Query_String c’est le flag QSA qui s’en charge. Après pour les parenthèses, je m’en sers jamais dans des URL moi
Euh tu veux dire renvoies sur “/site/abcsite/abcsite/abcsite…” coté serveur non? Je vois pas comment il peut te ressortir l’url coté serveur dans l’url coté client Pourquoi dans ta règle tu lui demandes de t’envoyer vers l’URL coté client?
Si j’ai bien compris, il suffirait de faire une autre règle placée avant du genre :
Effectivement pas le ?, & et # mais bon y a pas mal de caractere autorisé dans une URL. Encore plus si tu veux gerer des URL unicode. Bref je trouve que la methode enumerative n’est jamais top …
Je pense qu’elle a de l’intérêt dans de l’UR pure, mais pas de la redirection générale comme c’est le cas ici. Le principe d’énumérer permet de filtrer, donc bien entendu ça dépend de ce qu’on a besoin derrière
En somme, tu n’auras jamais accès à la partie #identifier, et gràce à mod_rewrite, tu n’as pas à gérer le query_string (tu peux par contre faire des conditions dessus).
Quand je dis renvoi c’est que Apache reçoit l’adresse x et renvoi, au client, les données situées au chemin y
Dans l’idéal j’aimerai que ça soit transparent (que le visiteur ne voie pas domaine.tld/site/index.php dans sa barre d’adresse).
J’ai bien compris, mais quand tu mets cette règle ça peut pas faire ce que tu veux :
Là tu lui dis :
Pour n’importe quel appel de page contenant les classes de caractères définies, je redirige vers http://www.domaine.tld/site/…
Le plus pratique dans l’UR c’est que justement il y a cette part “d’invisible” au client. Et le but principal est un truc du genre :
Je detecte une adresse url coté client => Je renvoies le fichier ciblé par le htaccess
Normalement cette règle devrait fonctionner comme il faut, après je comprends pas si tu as des problèmes :
RewriteRule ([-/\._0-9a-z]*)? /www/site/abc$1 [L,NC,QSA,NS]
ou
RewriteRule ([-/\._0-9a-z]*)? /site/abc$1 [L,NC,QSA,NS]