Jump to content
Sign in to follow this  
MarvinLeRouge

URL Rewriting : pb de syntaxe

Rate this topic

Recommended Posts

Salut,

Je ne trouve pas comment écrire la chose suivante :

SI le fichier demandé n'existe pas ALORS ré-écris l'url de telle façon (ça je sais)

SI cette nouvelle façon ne marche pas, alors ré-écris le encore, de telle autre façon

(j'ai des fichiers qui sont potentiellement à l'emplacement A ou à l'emplacement B)

Merci

Edited by MarvinLeRouge

Share this post


Link to post
Share on other sites

tu peut créer une page qui se nommerais error.php par exemple, récupérant le GET errid (int) de type 404, 403, 500, 504, etc

Ensuite, dans le HTACCESS tu rewrite la page error.php avec la forme que tu désire et tu ajoute

ErrorDocument 404 /url_de_error.php_Rewritée

je n'ai pas testé, mais dans ma tête, ça parait possible ^^

Share this post


Link to post
Share on other sites

SI le fichier demandé n'existe pas ALORS ré-écris l'url de telle façon (ça je sais)

Je ne sais pas comment tu arrives à faire cela en Rewriting (avec une rewriteMap ?)

mais en théorie, je dirais qu'il suffit de faire :

si not found et rep <> Rep1 et rep <> rep2 => réécrire en Rep1

si not found et rep = Rep1 => réécrire en Rep2

Share this post


Link to post
Share on other sites

Je suis en train de fondre un fusible, j'ai essayé un peu tout, mais j'avoue que je m'y perds :

/admin

/theme

/webroot

  1. Cette structure est existante, et je dois faire avec. L'existence d'un dossier webroot est dû au fait qu'il existe des fichiers à la racine réelle, qui ne doivent pas être accessibles par le web, et qui doivent bien être hiérarchiquement au dessus du reste.

  2. A la racine, j'ai un .htaccess qui contient les choses suivantes :
    RewriteRule (.*\.(png|gif|jpg|jpeg|js|css|swf))$ webroot/img_handler.php?arg=$1 [L]
    RewriteRule ^$ webroot/ [L]
    RewriteRule (.+) webroot/$1 [L]


    Problème : la 1ère ligne fait passer toutes les requètes css, js et img à travers un gestionnaire php qui ne fait rien d'autre que des tests d'existence de fichiers à différents emplacements potentiels.
    Or, je n'en veux pas, car ça empêche de faire proprement du rewriting ailleurs (sur des images dont on veut générer des miniatures à la volée au besoin, par exemple). Je veux donc faire ça en vrai url-rewriting.

  3. Ce que je veux faire :
    • Toutes les requètes img, css ou js correspondant à l'admin doivent aller chercher la source dans le dossier admin
      (img|js|css)/admin/(.*) => /admin/webroot/$1/$2
    • SI ce fichier n'existe pas, aller chercher la source dans /theme/webroot/$1/$2
    • N'appliquer la dernière règle que pour les fichiers qui ne rentrent pas dans les cas précédents
    • Et qu'on puisse éventuellement faire du rewriting plus loin dans la structure (typiquement dans /webroot/img)

J'ai vraiment l'impression de me rendre fou avec ce truc, alors que le principe a l'air tout simple.

Edited by MarvinLeRouge

Share this post


Link to post
Share on other sites

Personnellement, je ne vois pas comment on peut tester l'existence d'un fichier en Rewriting pur...

Et passer par un détournement de l'erreur 404 sera toujours lent.

Bon, mais en admettant que ton rewriting actuel fonctionne (personnellement, je ne vois pas comment la dernière ligne ne te génère pas une erreur 500... mais peut-être as-tu un autre htaccess dans webroot...), tu pourrais garder l'existant tout en ménageant de nouvelles possibilités :

par exemple si tu sors de la première règle, les urls avec un répertoire (= pas de slash dans le premier terme), tu peux mettre tes nouvelles images dans un répertoire "img" et faire ce que tu veux avec sans passer par le handler.

Share this post


Link to post
Share on other sites

Ah ben voilà, veni vidi, et quand même fini par vici :

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(/)*(img|js|css)/admin/(.*)$ /admin/webroot/$2/$3 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(/)*admin/(img|js|css)/(.*)$ /admin/webroot/$2/$3 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(/)*admin/webroot/(img|js|css)/(.*)$ /template_whale/webroot/$2/$3 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+) webroot/$1 [L]

  • Upvote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...