сбой правила перезаписи с URL-адресами Unicode на nginx с pcre 8.3 - PullRequest
3 голосов
/ 18 марта 2012

У меня проблема, аналогичная , описанной в этом вопросе . Однако мне удалось получить nginx (1.0.14), скомпилированный с последней версией PCRE (8.30), изменил правило перезаписи на использование UTF8, но все равно не получилось.

Мое правило перезаписи:

location / {
    try_files $uri $uri/ /index.php;
    rewrite "(*UTF8)^/imgthumb/(.*)$" /timthumb.php?$1 last;
}

Это прекрасно работает с изображениями без Юникода, но не работает, если имя файла содержит символы Юникода.

так /imgthumb/src=/wp-content/uploads/8姉妹の古いマトリョーシカ.jpg&h=121&w=137&zc=1 не удается

но /imgthumb/src=/wp-content/uploads/MOD0005.jpg&h=121&w=137&zc=1 работает отлично.

На Apache, использующем правило перезаписи .htaccess, он работает с обоими

RewriteRule ^/imgthumb/(.*)$ /timthumb.php?$1 [L]

Правильно ли мое правило перезаписи nginx? Есть ли способ сделать эту работу?

UPDATE: Я заметил, что проблема, похоже, связана с тем, что PHP-скрипт получает только один параметр (src) в массив $_GET с помощью nginx, но при переписывании apache он разбивается на другие параметры ...

1 Ответ

3 голосов
/ 22 марта 2012

Решение было в итоге предоставлено Валентином В. Бартеневым на форуме nginx после того, как я разместил там тот же вопрос.

Замена правила перезаписи на этот фрагмент сделала эту работу !!

   location ~ (*UTF8)^/imgthumb/(.*)$ {
            fastcgi_pass    unix:/var/spool/phpfpm.sock;
            include         fastcgi_params;
            fastcgi_param   SCRIPT_FILENAME    $document_root/timthumb.php;
            fastcgi_param   SCRIPT_NAME        /timthumb.php;
            fastcgi_param   QUERY_STRING $1;
    }
...