.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