J'ai des problèmes avec mod_rewrite. Ma structure d'annuaire (partie) est:problème de préfixe mod_rewrite
index.php
.htaccess
app
controllers
models
views
...
public
javascripts
stylesheets
foo
bar
Donc, comme vous pouvez le voir, tous les fichiers statiques sont app/public. Voilà la raison pour laquelle je voudrais demande la route comme:
http://www.example.com/images/logo.png => app/public/images/logo.png
http://www.example.com/javascripts/app.js => app/public/javascripts/app.js
http://www.example.com/uploads/blog/something => app/public/uploads/blog/something
Si ce fichier n'existe pas, alors il devrait route vers index.php, comme:
http://www.example.com/news/show/42 => index.php
(Because file app/public/news doens't exist)
Ainsi, c'est mon .htaccess actuel, mais je pense que cela peut être fait de manière plus élégante.
RewriteEngine on
RewriteRule (png|jpg|gif|bmp|ico)$ app/public/images/$1/$2.$3 [L]
RewriteRule ([^/.]+).js$ app/public/javascripts/$1.js [L]
RewriteRule ([^/.]+).css$ app/public/stylesheets/$1.css [L]
RewriteRule ^(.*)$ index.php [NC,L,QSA]
En outre, problème avec celui-ci est, il ne gère que les images, javascripts et feuilles de style, mais pas tous les autres fichiers.
Je sais qu'il est:
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
Mais, je ne sais pas comment les acheminer avec le préfixe "app/public /"? J'ai essayé:
RewriteCond app/public/%{SCRIPT_FILENAME} !-f
RewriteCond app/public/%{SCRIPT_FILENAME} !-d
Mais cela ne fonctionne pas! J'ai également essayé d'utiliser RewriteBase, mais cela n'a pas fonctionné.
EDIT:
J'utilise mod_expires, et je voudrais vraiment automatiser des demandes similaires:
http://www.example.com/images/logo.42.png => app/public/images/logo.png
http://www.example.com/javascripts/app.42.js => app/public/javascripts/app.js
Donc, comme vous pouvez le voir, je voudrais avoir le numéro facultatif entre le nom de fichier et l'extension , et ce nombre devrait être ignoré (il est seulement utilisé pour les futures expirations).
Auparavant, j'ai trouvé:
RewriteRule ^(.*)\.(\d+)(_m_\d+)?\.([^\.]+)$ $1.$4 [QSA]
Mais je ne comprends pas vraiment comment il fonctionne et travaille-t-il toujours dans mon exemple (plusieurs extensions peut-être)?
Merci!
je reçois 500, et dans le journal de réécriture, on dirait qu'il a en boucle infinitive. Mais je ne vois pas pourquoi, [L] devrait signifier que c'est la dernière, non? Aussi, si j'ai bien compris, vous redirigez tout vers l'application/public, n'est-ce pas? Qu'en est-il de la partie index.php? Désolé si j'ai mal compris! – mfolnovich
@mfolnovich Désolé, je n'ai pas coller le reste des fichiers – Aillyn
hey, tnx pour votre réponse. maintenant, il semble fonctionner pour les fichiers statiques, mais: 1. pour le chemin vide, il affiche app/public 2. pour les demandes réelles, il se bloque et dans le journal, il est dit: script '/ var/www/projets/petasite/app/public/index.php 'pas trouvé ou incapable de stat, j'ai essayé de mettre ../../index.php?url=$1, mais il a causé 500. EDIT: ne peut pas comprendre comment mettre des sauts de ligne dans les commentaires: S – mfolnovich