С тех пор imgcpu [.php] может быть изменен, вот мой ответ для чистки этого даже при том, что это собирается отменить большую ту работу, которую Вы сделали
В рамках программы можно циклично выполниться по всем возможным атрибутам и извлечь, какой бы ни присутствуют (в любом порядке!). Можно заменить все те правила с единственным правилом:
RewriteRule ^IMG-(.*)$ imgcpu\?parse=$1 [L]
и затем в imgcpu сценарии, у Вас был бы "синтаксический анализ" как переменное, содержащее folder1/some_funny_kitty_w3500_h10_cp_q90.jpg
. Удалите расширение из конца, имени папки и имени файла с начала, и затем можно циклично выполниться через различные параметры и извлечь их из строки. Что-то как (PHP, но понятие может быть сделан на любом языке. Вы могли бы даже сохранить некоторых мс путем выполнения его без regexes):
$values["q"]=50; // Set some defaults?
foreach (array("h","w","q","c","f") as $param) {
if (preg_match("/_${param}([^_]+)/",$_REQUEST["parse"],$result)) {
$values[$param]=$result[1];
}
}
В конце $values["h"]
имел бы высоту. Это было бы тонной, легче поддержать, если Вы когда-нибудь хотите добавить новые параметры. Вам было бы нужно немного работы для выяснения то, что Вы, как предполагается, делаете с "my_w2000_desktop_w200_h100.jpg" (или хуже: "my_w2000_desktop_h100.jpg" или еще худший "desktop_for_w2000_h100.jpg"), но если Вы запрещаете людям иметь двойные подчеркивания в именах файлов, Вы могли бы использовать двойные подчеркивания для разделения имени файла от опций (например, "my_w2000_desktop__h100.jpg") и разделять строку там (обратите внимание, что regexes выше требуют, чтобы каждая опция запустилась с _ символ),
Более легкая опция
Если можно принять не кодирование параметров в самом имени файла (это могло бы привести ко всем имеющим изображения совершенно других размеров все названные "some_funny_kitty.jpg"), затем парсинг может быть сделан тривиальным. Это использовало бы URL как http://example.com/IMG/w200/h100/folder1/my_w2000_desktop.jpg
. Удалите "-" из RewriteRule (просто ^IMG(.*)$
, и измените парсинг в PHP:
$parts=explode("/",$_REQUEST["parse"]);
$filename=array_pop($parts);
$folder=array_pop($parts);
foreach ($parts as $field) {
$param=substr($field,0,1);
$setting=substr($field,1); // assuming settings are always one letter followed by value
$values[$param]=$setting;
}
Если это приемлемо, Вы можете устранять mod_rewrite полностью: Используйте URL формы
http://example.com/imgcpu/w200/h100/folder1/my_w2000_desktop.jpg
и Apache выполнится imgcpu
с PATH_INFO
набор переменной среды к /w200/h100/folder1/my_w2000_desktop.jpg
($_SERVER["PATH_INFO"]
в PHP). Это хорошо работает для меня, но я видел, что некоторые сообщения жалуются, что в определенных средах PATH_INFO повреждается.
Что нужно проверить: