guyasyou писал(а):Какую можете предложить альтернативу?
Ну я же тебе объяснял уже эту тему.
Для того, чтобы передавать в ссылке запрещенные символы используются функции urlencode и urldecode.
Например генерируем ссылку с твоим кодом и предварительно код обрабатываем urlencode. Все, ссылка в браузере рабочая.
Когда юзверь кликает по ссылке, скрипт, который получает данные, обрабатывает их urldecode и получает код в первоначальном состоянии.
Ну а теперь по теме вопроса:
Я бы реализовал таким образом - создал бы атрибут для файлов, к примеру is_product. Т.е. те файлы, у которых он установлен - считаются товарами и к ним подход особый, остальные нам безразличны - обычные файлы.
Потом переопределил бы контроллер download_file и в нем бы сделал проверку.
Т.е. пользователь запрашивает файл
Происходит проверка, если у этого файла установлен атрибут is_product, то мы проверяем имеет ли данный пользователь право на скачу этого файла - есть он у него в покупках и т.д. Если не имеет - выдаем ему сообщение о том, что он ошибся дверью.
Если у этого файла не включен атрибут is_product - все выполняется как обычно в контроллере download_file.
По сути 10 строк кода и все. Включить атрибут сразу у кучи файлов тоже можно (т.е. если существует уже много товаров, то не придется каждый по одному мучить). 15 минут работы и без изобретения большого велосипеда.