NginX Rewrite и русские символы

Z0
На сайте с 13.09.2013
Offline
0
ze0
2142

Попросили на днях перенести сайт на связку nginx+php-fpm, полностью отказавшись от апача, столкнулся с проблемой адаптации правил mod_rewrite из .htaccess, никак не могу переварить такой случай:

RewriteEngine On


RewriteRule ^([0-9]+).html/?$ index.php?q=$1 [L]
RewriteRule ^free/([0-9]+).html/?$ index.php?free=1&q=$1 [L]
RewriteRule ^print/([0-9]+).txt/?$ print.php?q=$1 [L]

RewriteRule ^news/?$ news.php [L]
RewriteRule ^news/([0-9]+)/?$ news.php?year=$1 [L]
RewriteRule ^news/([0-9]+)/([0-9]+)/?$ news.php?year=$1&mon=$2 [L]
RewriteRule ^news/([0-9]+)/([0-9]+)/([0-9]+)/?$ news.php?year=$1&mon=$2&day=$3 $
RewriteRule ^news/[0-9]+/[0-9]+/[0-9]+/([0-9]+)-[a-zA-Z0-9_]+?$ news.php?id=$1 $

RewriteRule ^([a-zA-Z0-9а-яёА-ЯЁ-]{1,})/?$ index.php?start=$1 [L]
RewriteRule ^band/([^/]+)/?$ index.php?band=$1 [L]
RewriteRule ^ost/([a-zA-Z0-9а-яёА-ЯЁі_\.\'\(\),:;!@$*+-]+)/?$ index.php?ost=$1 [L]

Автоматический генератор, найденный в просторах, выдал такой вариант:

location / {

rewrite ^/([0-9]+).html/?$ /index.php?q=$1 break;
rewrite "^/([a-zA-Z0-9а-яёА-ЯЁ-]{1,})/?$" /index.php?start=$1 break;
rewrite "^/ost/([a-zA-Z0-9а-яёА-ЯЁі_\.\'\(\),:;!@$*+-]+)/?$" /index.php?ost=$1 break;
}

location /free {
rewrite ^/free/([0-9]+).html/?$ /index.php?free=1&q=$1 break;
}

location /print {
rewrite ^/print/([0-9]+).txt/?$ /print.php?q=$1 break;
}

location /news {
rewrite ^/news/?$ /news.php break;
rewrite ^/news/([0-9]+)/?$ /news.php?year=$1 break;
rewrite ^/news/([0-9]+)/([0-9]+)/?$ /news.php?year=$1&mon=$2 break;
rewrite ^/news/([0-9]+)/([0-9]+)/([0-9]+)/?$ /news.php?year=$1&mon=$2&day=$3 break;
rewrite ^/news/[0-9]+/[0-9]+/[0-9]+/([0-9]+)-[a-zA-Z0-9_]+?$ /news.php?id=$1 break;
}

location /band {
rewrite ^/band/([^/]+)/?$ /index.php?band=$1 break;
}

но проблема с русскими символами в конфиге и, если даже избавиться от той строчки, корректно работает лишь /band, остальное вываливается в 404ю. может кто помочь?

AU
На сайте с 03.09.2009
Offline
88
#1

Решение простое - прогнать конфиги через скрипт, который уберет кириллицу. Забекапьте конфиг и попробуйте так:

tr -cd '\11\12\40-\176' < $INPUT_FILE > $OUTPUT_FILE

Unix в вопросах и ответах https://unixhow.com (https://unixhow.com)
ngsv
На сайте с 12.10.2012
Offline
47
#2

rewrite ^/([0-9]+).html/?$ /index.php?q=$1 break;
rewrite "(*UTF8)^/([a-zA-Z0-9а-яёА-ЯЁ-]{1,})/?$" /index.php?start=$1 break;
rewrite "(*UTF8)^/ost/([a-zA-Z0-9а-яёА-ЯЁі_\.\'\(\),:;!@$*+-]+)/?$" /index.php?ost=$1 break;
rewrite ^/free/([0-9]+).html/?$ /index.php?free=1&q=$1 break;
rewrite ^/print/([0-9]+).txt/?$ /print.php?q=$1 break;
rewrite ^/news/?$ /news.php break;
rewrite ^/news/([0-9]+)/?$ /news.php?year=$1 break;
rewrite ^/news/([0-9]+)/([0-9]+)/?$ /news.php?year=$1&mon=$2 break;
rewrite ^/news/([0-9]+)/([0-9]+)/([0-9]+)/?$ /news.php?year=$1&mon=$2&day=$3 break;
rewrite ^/news/[0-9]+/[0-9]+/[0-9]+/([0-9]+)-[a-zA-Z0-9_]+?$ /news.php?id=$1 break;
rewrite ^/band/([^/]+)/?$ /index.php?band=$1 break;

Не проверял, но должно работать.

SIQWELL (http://siqwell.com/) - Быстро. Качественно. Дорого.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий