Корректные «чистые» URL на nginx для Drupal

Запишу, чтобы самому же не забыть в следующий раз. Почти все конфиги для поддержки «чистых» URL в nginx для адекватной работы Drupal — неправильные. Точнее, в некоторых старых этот момент учтен (которые через «if (!-e $request_filename)» и т.п. сделаны), а в новых — красивых и цивильных — нет. В частности — в том, который в FAQ самого nginx дается. Корень зла в том, что Друпалу в запросе передается URI целиком вместе с первым слэшем, а это — неправильно. Т.е. надо передавать не q=/node/1, а q=node/1. Самое печальное, что в .htaccess по умолчанию, который идет в комплекте, правила тоже неправильные: «RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]» вместо «RewriteRule ^/(.*)$ index.php?q=$1 [L,QSA]». При этом все работает нормально, а косяки вылезают, например, при создании мультиязычного сайта — на всех языках, кроме default ничего не открывается — page not found.

Соответственно, достаточно вставить маленький rewrite в location @drupal в описании сервера для nginx’а:

rewrite        ^/(.*)$          $1  break;
fastcgi_param  QUERY_STRING     q=$uri&$args;

И все тут же становится хорошо…

Корректные «чистые» URL на nginx для Drupal: 2 комментария

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *