.htaccess to nginx
Maxim Dounin
mdounin at mdounin.ru
Wed Jul 23 12:03:51 UTC 2014
Hello!
On Tue, Jul 22, 2014 at 05:37:14PM -0400, Kradllit wrote:
> Здравствуйте. Необходимо перенести сайт с Apache на NGINX, но после переноса
> на NGINX не открываются страницы.
> В файле .htaccess находится правило:
>
> RewriteEngine on
> RewriteCond $1 !^(index.php|resources|robots.txt)
> RewriteCond %{REQUEST_FILENAME} !-f
> RewriteCond %{REQUEST_FILENAME} !-d
> RewriteRule ^(.*)$ index.php/$1 [L,QSA]
>
> С помощью онлайн конвертора
> http://www.anilcetin.com/convert-apache-htaccess-to-nginx/
> Получил такой выход:
>
> if ($1 !~ "^(index.php|resources|robots.txt)"){
> set $rule_0 1$rule_0;
> }
> if (!-f $request_filename){
> set $rule_0 2$rule_0;
> }
> if (!-d $request_filename){
> set $rule_0 3$rule_0;
> }
> if ($rule_0 = "321"){
> rewrite ^/(.*)$ /index.php/$1 last;
> }
>
>
> Но при обновлении конфигурации получаю ошибку:
> nginx: [emerg] unknown "1" variable
Не надо пользоваться "онлайн конверторами" - они делают
механическое преобразование и не оборудованы системой понимания
того, что они делают. На выходе - в лучшем случае крайне
неоптимальный конфиг, в худшем - полный мусор, если задача вышла
за те параметры, которым соответствующий конвертер обучен. В
данном случае проблема в том, что RewriteCond умеет ссылаться на
выделения из rewrite'а, в то время как "онлайн конвертор" про это
не знает и специально обрабатывать не умеет.
Правильный путь - понять, что делает соответствующее правило с
логической точки зрения, и написать то же самое с помощью средств,
предоставляемых nginx.
http://nginx.org/en/docs/http/converting_rewrite_rules.html
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru