Назад | Перейти на главную страницу

Конвертация правил nginx из .htaccess

У меня проблемы с преобразованием некоторых правил .htaccess на сервер nginx.

RewriteRule ^$ index.php [L]
RewriteRule ^([A-Za-z0-9-]+)?$ index.php?section=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?section=$1&go=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?section=$1&go=$2&action=$3 [L]

Может ли кто-нибудь помочь с преобразованием и объяснить, как эти регулярные выражения преобразовываются в nginx?

Я не уверен в синтаксисе, согласно документации nginx, я пробовал следующее:

server {
  rewrite ^([A-Za-z0-9-]+)?$ index.php?section=$1&go=$2;
}

Я также пробовал использовать корневой блок, как показано ниже. Я не уверен, как try_files хотя влияет на это.

location / {

    rewrite ^$ /index.php break;
    rewrite ^([A-Za-z0-9-]+)?$ /index.php?section=$1 break;
    rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2 break;
    rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2&action=$3 break;
    rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2&action=$3&id=$4 break;

    try_files $uri $uri/ /index.php?$args;
}

Хотя это, похоже, не работает. Нужно ли сначала разместить это в блоке локации?

Я тестирую следующие URL-адреса. Имя хоста удалено, так как мне не разрешено делиться им.

http://www.example.com/entry
http://www.example.com/volunteers
http://www.example.com/contact

В основном страница загружается так, как будто происходит обращение к index.php, а разделы не загружаются, если это имеет смысл. Кажется, что в скрипт index.php ничего не передается.

В location блок - обычное место для вашего rewrite директивы, значит, вы поняли.

Единственное, чего явно не хватает в вашей конфигурации, - это ведущий / в ваших регулярных выражениях:

location / {
  rewrite ^/$ /index.php break;
  rewrite ^/([A-Za-z0-9-]+)?$ /index.php?section=$1 break;
  rewrite ^/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2 break;
 }