Как я могу получить сервер Apache httpd для сопоставления имени акцентированных элементов HTML в файлы без акцента - PullRequest
1 голос
/ 07 февраля 2012

Сервер не поддерживает символы на португальском языке, и у меня есть изображения, содержащие латинские символы, такие как intrusão.png, localização.png, inundações.png и т. Д. Однако мне нужно сохранить источник страницы с именамифайлы на португальском.Что мне нужно, это когда страница загружается, когда она запрашивает файл с сервера, сервер заменяет символы ç на c, â для a, õ и т. Д.

1 Ответ

2 голосов
/ 07 февраля 2012

Если я хорошо понимаю вашу проблему:

  • у вас есть реальные файлы на сервере, которые не содержат символов с акцентом, только 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-адресах изображений? Может быть, решение будет менее сложным с этой стороны, и кого действительно волнуют имена изображений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...