У меня возникли некоторые трудности с mod_rewrite. Моя структура каталогов (часть):
index.php
.htaccess
app
controllers
models
views
...
public
javascripts
stylesheets
foo
bar
Итак, как видите, все статические файлы находятся в app / public. Вот почему я хотел бы направлять запросы как:
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
Если этот файл не существует, он должен быть направлен в index.php, например:
http://www.example.com/news/show/42 => index.php
(Because file app/public/news doens't exist)
Итак, это мой текущий .htaccess, но я думаю, что это можно сделать более элегантно.
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]
Кроме того, проблема в том, что он обрабатывает только изображения, JavaScript и таблицы стилей, но не все другие файлы.
Я знаю, что есть:
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
Но я не знаю, как маршрутизировать их с префиксом "app / public /"? Я попробовал:
RewriteCond app/public/%{SCRIPT_FILENAME} !-f
RewriteCond app/public/%{SCRIPT_FILENAME} !-d
Но это не работает! Я также пытался использовать RewriteBase, но это не сработало.
EDIT:
Я использую mod_expires, и я бы очень хотел автоматизировать запросы, такие как:
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
Итак, как вы можете видеть, я хотел бы иметь необязательный номер между именем файла и расширением, и этот номер следует игнорировать (он используется только для будущих значений).
Ранее я нашел:
RewriteRule ^(.*)\.(\d+)(_m_\d+)?\.([^\.]+)$ $1.$4 [QSA]
Но я не очень понимаю, как это работает, и всегда ли это работает в моем примере (возможно, несколько расширений)?
Спасибо!