Если я хорошо понимаю вашу проблему:
- у вас есть реальные файлы на сервере, которые не содержат символов с акцентом, только ASCII7
- вы хотите сохранить ссылки на файлы тезисов с акцентированными именами, поэтому у вас будет URL с кодированными ссылками на файлы тезисов
Таким образом, веб-сервер получает запрос на images/localização.png
(который фактически кодируется браузерами в: images/localiza%C3%A7%C3%A3o.png
) и должен вернуть файл /path/to/documentroot/images/localizacao.png
. A транслитерация проблема.
Я совершенно уверен, что вы не можете сделать это с помощью простых rewriteRules. Но если у вас есть реальный доступ к конфигурации Apache (не только уродливые и ограниченные файлы .htaccess, я имею в виду настоящие файлы конфигурации, иначе вы ничего не можете сделать), то вы можете попробовать что-то с RewriteMap .
Rewritemap уже является довольно продвинутым использованием mod-rewrite, и мы будем использовать более сложное ключевое слово Rewritemap, которое является prg:
, позволяющее вызывать внешнюю программу отображения, написанную на языке. вы предпочитаете.
Сначала вы записываете внешнюю программу (в области конфигурации Virtualhost, а не в Directory
).
RewriteLock /var/lock/transliterate_rewritemaplock.lock
RewriteMap transliteration prg:/path/to/modrewritemap_transliterate.pl
Затем вы используете его в rewriteRule, возможно, с каким-то RewriteCond ранее.
<Directory /my/images/>
RewriteRule - ${transliteration:%{REQUEST_URI}} [L]
</Directory>
И последнее, но не менее важное: вы пишете эту внешнюю программу (здесь /path/to/modrewritemap_transliterate.pl
, Perl-скрипт). Я пытался написать один с Text :: Unidecode . Но этот CPL-модуль perl, возможно, придется установить на сервер.
#!/usr/bin/perl
$| = 1; # Turn off I/O buffering
use utf8;
use Text::Unidecode;
while (<>) {
my $line = $_;
if ($line =~ m/(.*?)\.png/){
print unidecode($1).".png\n";
} else {
print "\n";
}
}
В командной строке это преобразует images/localização.png
в images/localizaASSAPSo.png
, что не очень хорошо. Но я не уверен, что моя командная строка посылает настоящий utf8. На вашем веб-сервере вы также должны проверить, получаете ли вы настоящий utf8 или что-то еще (я думаю, вы не должны получать версию с urlencoded). И вам нужно будет найти язык, способный транслитерировать ваш ввод ...
Транслитерация - сложная проблема. Вы уверены, что ДОЛЖНЫ сохранить акцентированные буквы в URL-адресах изображений? Может быть, решение будет менее сложным с этой стороны, и кого действительно волнуют имена изображений?