Назад | Перейти на главную страницу

Что не так с этим переписыванием Apache?

У меня есть набор перезаписей, который должен улавливать любые запросы на /cache/images/* который не существует в файловой системе и возвращает общее изображение в соответствии с суффиксом (соответствующий * _1.jpg для запросов на такие ресурсы, как /cache/images/foo_1.jpg которые не существуют).

Приведенный ниже фрагмент кода работает в большинстве случаев, но также соответствует всем запросам, заканчивающимся на 1.jpg, 2.jpg или 3.jpg, так что "domain.com/1.jpg" также возвращает /images/generic_1.jpg общий образ.

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule . - [L]

RewriteCond %{REQUEST_URI} ^/cache/images/.*$ [NC]
RewriteRule .*1.jpg /images/generic_1.jpg [L]
RewriteRule .*2.jpg /images/generic_2.jpg [L]
RewriteRule .*3.jpg /images/generic_3.jpg [L]

Если я скопирую второй RewriteCond перед 2.jpg и 3.jpg RewriteRules, он работает так, как задумано, но я бы хотел сделать это правильно и RewriteCond применить к трем RewriteRuleс под ним. Что я делаю не так?

[L] - означает последнее правило для оценки: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule (-: Вы можете взять это отсюда ...?

Редактировать 1 - Очистка правил:

Если ваши файлы названы в этом шаблоне, вы мог сделай что-нибудь вроде этого:

RewriteRule .*(\d{1,}).jpg /images/generic_$1.jpg

\d{1,} - соответствует цифре 1 или больше; поместите это в пару "()"означает" сохранить совпавшую строку в $1"(также известное как первое совпадение), которое затем можно использовать в пути назначения.