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

Nginx. Использование редиректов с регулярными выражениями

Я новичок в nginx. У меня есть nginx до Apache, и у меня проблемы.

Мне кажется в конфиге нужно 2 правила:

Правило 1) если у нас есть url "/ my_path", мы не трогаем его, но пользователь переходит на "/my_path.php"

Правило 2) если у нас есть URL «/my_path.php», мы меняем его на «/ my_path», а пользователь переходит на «/my_path.php», ПОТОМУ ЧТО мы возвращаемся к правилу 1.

Я думаю, это необходимо для SEO?

Моя конфигурация, например, такая ...

server {
    listen 8080;
    server_name my_apache_server;

    location / {
        proxy_pass http://my_apache_server/;
    }

    location ~^\/(.+)$ {
        rewrite ^\/(.+)$ /$1.php break;
        proxy_pass http://my_apache_server/;
    }

    location ~^\/(.+)\.php$ {
        proxy_redirect http://my_apache_server/$1 http://my_apache_server/error.php;
    }

    ...
}

Но nginx показывает ошибку:

nginx: [emerg] "proxy_pass" cannot have URI part in location given 
by regular expression, or inside named location, or inside "if" statement, 
or inside "limit_except" block

Насколько я понимаю, proxy_pass нельзя использовать с регулярными выражениями. Это верно? Я думаю, что моя конфигурация неправильная?

Кто-нибудь может помочь? Заранее благодарны за Вашу помощь.

МОЕ РЕШЕНИЕ - оно работает

    # index page
    location / {
        proxy_pass http://my_apache_server;
    }

    # redirect(301) real "name.php" file to "name"
    location ~ ^/([A-Za-z_]+).php$ {
        rewrite  ^/([A-Za-z_]+).php$  /$1  permanent;
    }

    # not existen a-z file name to name.php
    location ~ ^/([A-Za-z_]+)$ {
        proxy_pass http://my_apache_server/$1.php;
    }

Невозможно проксировать URI, это приведет к двойной косой черте после URL (http://my_apache_server//$.php).

Пытаться:

location ~^\/(.+)$ {
  rewrite ^\/(.+)$ /$1.php break;
  proxy_pass http://my_apache_server;
}