Rsync is a great tool, but sometimes it's hard to use.
The problem is that you use --exclude-from , which sets global exclusion rules on both the sending and receiving sides.
Before rsync performs operations on the file system, it will first collect two lists of files, one for the sending side (client) and the other for the receiving side (server). If the file is excluded on both sides, rsync will simply ignore it. If it is excluded only on the sending side and exists on the receiving side, rsync will delete it.
In your case, since your rules exclude files on both sides, rsync does not delete them. Then you use --delete-excluded to force the deletion. But, as you said, this option conflicts with --backup --backup-dir=rsync/backup .
I suggest you do the following.
Thus, your rules will apply only to the sending side, and files specified as exclusion rules will be deleted from the receiving side, if found. This should not conflict with backup options.
Update
Essentially, the -FF makes rsync files for directory files for each directory named .rysnc-filter on both sides of the transfer. In your case, it will exist only on the sending side, so its rules will not apply to the receiving side.
Actually, -FF is equal to -F -F . The first F tells rsync to combine the rules from .rsync-filter into the root directory of the source and destination directories, as I said. The second F tells rsync about their exception. You do not want .rsync-filter be passed, otherwise your exclusion rules will also apply to the receiving side, and your original problem will return - excluded files will no longer be deleted.
Here my man (1) rsync says:
-F same as --filter='dir-merge /.rsync-filter' repeated: --filter='- .rsync-filter'