LINUX.ORG.RU

Редирект запросов на index.php в nginx

 ,


0

1

Не могу отправить все запросы на index.php.

С апачем было вот так:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]

Прописал вот так, но не фурычит:

location / {
                index index.php;
                try_files $uri $uri/ /index.php;
        }

По всем запросам открывает главную. В $_SERVER['REDIRECT_URL'] ничего не попадает.

index.php организован примерно так.

Где мой косяк?

★★★

Последнее исправление: zevilz (всего исправлений: 2)

В гугле нашел в нескольких комментах, что $_SERVER['REDIRECT_URL'] поддерживается только апачем. Это так? Пока заменил его на REQUEST_URI.

zevilz ★★★
() автор топика
Ответ на: комментарий от zevilz

э… $_SERVER - грубо говоря, параметры, которые передаёт сервер вместе с запросами. Что туда засунешь (fastcgi_param), то туда и уйдёт.

alexmaru
()
# server {} на каждый сайт свой
server {
    listen 192.168.3.9:80;
    # чтобы без всяких if отправлять куда надо
    server_name www.site.ru;
    return 301 $scheme://site.ru$request_uri; # так он сливает запросы с www. и без в один, чтобы в том же аналитиксе всё норм было
}

server {
    server_name site.ru 192.168.3.9;

    listen 192.168.3.9:80;
    # для ip6 нужны []

    access_log /var/log/nginx/site.ru-access.log main buffer=16k;
    error_log /var/log/nginx/site.ru-error.log;

    # 404 не будет работать, когда в try_files указан наличествующий /index.php. вместо него в конце надо писать =404
    error_page 404 500 502 503 504 /index.php;

    # root должен писаться 1 раз внутри server{}, ДО location{}, но если ОЧЕНЬ надо, чтобы кидало в определённую диру, можно и для каждой location свой root
    root /usr/local/web/data/cs2ms.ru;

    location / {
#       limit_req zone=one burst=20;
        try_files $uri $uri/ /index.php;
    }

    location /cab/ {
#       limit_req zone=one burst=2;
        # тут можно писать /index.php, а не /cab/index.php
        try_files $uri $uri/ /cab/index.php;
    }

    location ~* \.php$ {
#       limit_req zone=one burst=20;
        try_files $uri /index.php;
        fastcgi_index index.php;

        fastcgi_pass unix:/var/run/php5-fpm.sock;
# ибо по умолчанию только GET HEAD
        fastcgi_cache_methods GET HEAD POST;
# Игнорируем заголовки, относящиеся к кешированию, полученные от FastCGI-сервера. игнорирует указанное время экспирации, будет всегда отдавать из кэша, вплоть до inactive=1d
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
# Необходимо для передачи cookie в соответствующие переменные, например cookie с именем phpsessid будет находится в переменной $cookie_phpsessid
# Если с последними версиями nginx возникли проблемы с передачей cookies или авторизацией — решение: fastcgi_pass_header «Set-Cookie»;
        fastcgi_pass_header Cookie;
# Формируем уникальный ключ; в данном случае различаем пользователей с помощью $cookie_phpsessid
        fastcgi_cache_key "$server_addr:$server_port$request_uri|$cookie_phpsessid";
# Говорим о том, что использовать надо вышеобъявленную кеш-зону fastcgi_cache
        fastcgi_cache fastcgi_cache;
# Указываем папку для хранения временных файлов
        fastcgi_temp_path  /tmp/nginx/temp 1 2;
# Используем вариант из кеша (даже если он устарел) в случае ошибки
        fastcgi_cache_use_stale updating error timeout invalid_header http_500;
# Время жизни кеша для ответов 200, 301 & 302
        fastcgi_cache_valid 0s;
    }

}

php-fpm поставить не забудь, чтобы .php обрабатывать

рук-во админа: https://www.nginx.com/resources/admin-guide/

tip78
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.