robots.php

Установка, ошибки при работе с модулями, интеграции и прочее
Dimmam
Сообщения: 27
Зарегистрирован: 22.04.2026
Поблагодарил: 5 раз
Спасибо: 1 раз

robots.php

Непрочитанное сообщение Dimmam »

Приветствую!
Ребят подскажите как заставить работать robots.php под Nginx + PHP-FPM?
Прописал
location = /robots.txt {
        allow all;
        rewrite ^/robots\.txt$ /robots.php;
    }
получаю 403 Forbidden при обращении к нему :(
Аватара пользователя
Tom
Разработчик дополнений
Сообщения: 302
Зарегистрирован: 10.03.2022
Откуда: Казахстан - Алматы
Поблагодарил: 17 раз
Спасибо: 135 раз
Контактная информация:

Re: robots.php

Непрочитанное сообщение Tom »

А так ?

Код: Выделить всё

location = /robots.txt {
    rewrite ^ /robots.php last;
}
 
Аватара пользователя
nikifalex
Разработчик дополнений
Сообщения: 424
Зарегистрирован: 17.03.2022
Откуда: Россия
Поблагодарил: 12 раз
Спасибо: 55 раз
Контактная информация:

Re: robots.php

Непрочитанное сообщение nikifalex »

403 тут отдаёт не сам rewrite, а другой location. Скорее всего в конфиге есть правило, которое запрещает прямой вызов .php, кроме index.php (в сборках под OpenCart это частое дело), и robots.php под него попадает.

Проще всего отдать его в PHP-FPM прямо из этого location, без rewrite:

Код: Выделить всё

location = /robots.txt {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/robots.php;
    fastcgi_pass unix:/run/php/php-fpm.sock; # ваш сокет/порт, как в location для php
}

Так другие правила уже не мешают. После правки nginx -t и reload.
Всякие крутые модули под заказ и в наличии https://liveopencart.ru/nikifalex
Dimmam
Сообщения: 27
Зарегистрирован: 22.04.2026
Поблагодарил: 5 раз
Спасибо: 1 раз

Re: robots.php

Непрочитанное сообщение Dimmam »

Tom писал(а): ↑02 окт 2026, 15:23 А так ?

Код: Выделить всё

location = /robots.txt {
    rewrite ^ /robots.php last;
}
все так же :(
Dimmam
Сообщения: 27
Зарегистрирован: 22.04.2026
Поблагодарил: 5 раз
Спасибо: 1 раз

Re: robots.php

Непрочитанное сообщение Dimmam »

nikifalex писал(а): ↑02 окт 2026, 16:19 403 тут отдаёт не сам rewrite, а другой location. Скорее всего в конфиге есть правило, которое запрещает прямой вызов .php, кроме index.php (в сборках под OpenCart это частое дело), и robots.php под него попадает.

Проще всего отдать его в PHP-FPM прямо из этого location, без rewrite:
 

Код: Выделить всё

location = /robots.txt {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/robots.php;
    fastcgi_pass unix:/run/php/php-fpm.sock; # ваш сокет/порт, как в location для php
}

Так другие правила уже не мешают. После правки nginx -t и reload.

а вот тут я не на столько опытен чтоб понять :( помогите плиз 
location @php {
        include /etc/nginx/vhosts-resources/eburg.chernil.net/dynamic/*.conf;
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@eburg.chernil.net";
        fastcgi_pass unix:/var/www/php-fpm/4.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
Аватара пользователя
nikifalex
Разработчик дополнений
Сообщения: 424
Зарегистрирован: 17.03.2022
Откуда: Россия
Поблагодарил: 12 раз
Спасибо: 55 раз
Контактная информация:

Re: robots.php

Непрочитанное сообщение nikifalex »

Вставьте этот блок в конфиг сайта, внутрь server { ... }, рядом с вашим location @php. Старый location = /robots.txt с rewrite удалите:

Код: Выделить всё

location = /robots.txt {
    include /etc/nginx/vhosts-resources/eburg.chernil.net/dynamic/*.conf;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/robots.php;
    fastcgi_pass unix:/var/www/php-fpm/4.sock;
}

Сокет и include я взял из вашего блока, так что больше ничего менять не надо. Потом в консоли nginx -t и, если ошибок нет, nginx -s reload.

Учтите: ISPmanager может перезаписать конфиг, если менять настройки сайта через панель. Тогда блок придётся добавить заново.

И да, гадать так можно долго: не видя все конфиги целиком и без доступа к серверу, это всё равно попытки наугад.
Всякие крутые модули под заказ и в наличии https://liveopencart.ru/nikifalex
Dimmam
Сообщения: 27
Зарегистрирован: 22.04.2026
Поблагодарил: 5 раз
Спасибо: 1 раз

Re: robots.php

Непрочитанное сообщение Dimmam »

ну ни чего не помогает :( конкретно на этом сайте 404 получаю  :(
server {
    server_name eburg.chernil.net www.eburg.chernil.net;
    charset off;
    index index.php index.html;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/eburg.chernil.net/*.conf;
    access_log /var/www/httpd-logs/eburg.chernil.net.access.log;
    error_log /var/www/httpd-logs/eburg.chernil.net.error.log notice;
    ssi on;
    set $root_path /var/www/www-root/data/www/prof-66.ru;
    root $root_path;
    if (!-e $request_filename){
    rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
    location / {
   
    location ~ ^/(index|admin/index)\.php {
        try_files /does_not_exists @php;
    }

    location = /sitemap.xml {
        allow all;
        rewrite ^/(.*)$ /index.php?route=extension/feed/google_sitemap last;
    }
    location = /robots.txt {
        allow all;
        rewrite ^/robots\.txt$ /robots.php;
    }

    location ~ /\. {
        deny all;
    }
    location ~ ^/system/ {
        deny all;
    }
    location ~* \.(php|log|tpl|txt|twig|xml|ini)$ {
        deny all;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|webp|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
        expires 365d;
    }
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
        location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|webp|woff|woff2)$ {
            expires 120m;
        }
}
    gzip on;
    gzip_comp_level 5;
    gzip_disable "msie6";
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
    include /etc/nginx/users-resources/www-root/*.conf;
    return 301 https://$host:443$request_uri;
    set $root_path /var/www/www-root/data/www/eburg.chernil.net;
    location @php {
        include /etc/nginx/vhosts-resources/eburg.chernil.net/dynamic/*.conf;
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@eburg.chernil.net";
        fastcgi_pass unix:/var/www/php-fpm/4.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
    listen 37.230.113.70:80;
}
server {
    server_name eburg.chernil.net www.eburg.chernil.net;
    ssl_certificate "/var/www/httpd-cert/www-root/eburg.chernil.net_le3.crtca";
    ssl_certificate_key "/var/www/httpd-cert/www-root/eburg.chernil.net_le3.key";
    ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    add_header Strict-Transport-Security "max-age=31536000;";
    ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
    charset off;
    index index.php index.html;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/eburg.chernil.net.ru/*.conf;
    access_log /var/www/httpd-logs/eburg.chernil.net.access.log;
    error_log /var/www/httpd-logs/eburg.chernil.net.error.log notice;
    ssi on;
    set $root_path /var/www/www-root/data/www/prof-66.ru;
    root $root_path;
    if (!-e $request_filename){
    rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
    location / {
   
    location ~ ^/(index|admin/index)\.php {
        try_files /does_not_exists @php;
    }

    location = /sitemap.xml {
        allow all;
        rewrite ^/(.*)$ /index.php?route=extension/feed/google_sitemap last;
    }

    location ~ /\. {
        deny all;
    }
    location ~ ^/system/ {
        deny all;
    }
    location ~* \.(php|log|tpl|txt|twig|xml|ini)$ {
        deny all;
    }

    location ~* ^.+\.(jpg|jpeg|gif|png|svg|webp|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
        expires 365d;
    }
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
        location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|webp|woff|woff2)$ {
            expires 120m;
        }
}
    gzip on;
    gzip_comp_level 5;
    gzip_disable "msie6";
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
    include /etc/nginx/users-resources/www-root/*.conf;
    include /etc/nginx/vhosts-resources/eburg.chernil.net/*.conf;
    if ($host = www.eburg.chernil.net) {
        return 301 https://eburg.chernil.net$request_uri;
    }
    set $root_path /var/www/www-root/data/www/prof-66.ru;
 location = /robots.txt {
    include /etc/nginx/vhosts-resources/eburg.chernil.net/dynamic/*.conf;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/robots.php;
    fastcgi_pass unix:/var/www/php-fpm/4.sock;
}
    location @php {
        include /etc/nginx/vhosts-resources/eburg.chernil.net/dynamic/*.conf;
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@eburg.chernil.net";
        fastcgi_pass unix:/var/www/php-fpm/4.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
    listen 37.230.113.70:443 ssl;
}
 
Аватара пользователя
nikifalex
Разработчик дополнений
Сообщения: 424
Зарегистрирован: 17.03.2022
Откуда: Россия
Поблагодарил: 12 раз
Спасибо: 55 раз
Контактная информация:

Re: robots.php

Непрочитанное сообщение nikifalex »

Теперь понятно. 404 даёт if (!-e $request_filename) на уровне server: файла robots.txt нет, поэтому запрос уходит в OpenCart как _route_=robots.txt, и OpenCart отвечает 404. А 403 был от deny all для .php: пропускаются только index.php и admin/index.php.

Поправить надо две вещи в блоке server для 443.

1. Прямо перед строкой if (!-e $request_filename){ добавьте:

Код: Выделить всё

rewrite ^/robots\.txt$ /robots.php last;

2. Внутри location / замените

Код: Выделить всё

location ~ ^/(index|admin/index)\.php {
на

Код: Выделить всё

location ~ ^/(index|admin/index|robots)\.php {

Добавленный мной location = /robots.txt и ваш старый с rewrite удалите. Потом nginx -t и nginx -s reload.

Проверьте ещё, что robots.php лежит в /var/www/www-root/data/www/prof-66.ru: root у сайта указывает туда.
Всякие крутые модули под заказ и в наличии https://liveopencart.ru/nikifalex
Аватара пользователя
nikifalex
Разработчик дополнений
Сообщения: 424
Зарегистрирован: 17.03.2022
Откуда: Россия
Поблагодарил: 12 раз
Спасибо: 55 раз
Контактная информация:

Re: robots.php

Непрочитанное сообщение nikifalex »

Вот ваш конфиг целиком, уже с исправлениями:

Код: Выделить всё

server {
    server_name eburg.chernil.net www.eburg.chernil.net;
    listen 37.230.113.70:80;
    include /etc/nginx/vhosts-includes/*.conf;
    return 301 https://$host$request_uri;
}

server {
    server_name eburg.chernil.net www.eburg.chernil.net;
    ssl_certificate "/var/www/httpd-cert/www-root/eburg.chernil.net_le3.crtca";
    ssl_certificate_key "/var/www/httpd-cert/www-root/eburg.chernil.net_le3.key";
    ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    add_header Strict-Transport-Security "max-age=31536000;";
    ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
    charset off;
    index index.php index.html;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/eburg.chernil.net/*.conf;
    access_log /var/www/httpd-logs/eburg.chernil.net.access.log;
    error_log /var/www/httpd-logs/eburg.chernil.net.error.log notice;
    ssi on;
    set $root_path /var/www/www-root/data/www/prof-66.ru;
    root $root_path;

    if ($host = www.eburg.chernil.net) {
        return 301 https://eburg.chernil.net$request_uri;
    }

    rewrite ^/robots\.txt$ /robots.php last;

    if (!-e $request_filename) {
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }

    location / {
        location ~ ^/(index|admin/index|robots)\.php {
            try_files /does_not_exists @php;
        }
        location = /sitemap.xml {
            rewrite ^/(.*)$ /index.php?route=extension/feed/google_sitemap last;
        }
        location ~ /\. {
            deny all;
        }
        location ~ ^/system/ {
            deny all;
        }
        location ~* \.(php|log|tpl|txt|twig|xml|ini)$ {
            deny all;
        }
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
        location ~* ^.+\.(jpg|jpeg|gif|png|svg|webp|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|woff|woff2)$ {
            expires 365d;
        }
    }

    location @php {
        include /etc/nginx/vhosts-resources/eburg.chernil.net/dynamic/*.conf;
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@eburg.chernil.net";
        fastcgi_pass unix:/var/www/php-fpm/4.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }

    gzip on;
    gzip_comp_level 5;
    gzip_disable "msie6";
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
    include /etc/nginx/users-resources/www-root/*.conf;

    listen 37.230.113.70:443 ssl;
}

Что поменял, кроме robots:
- блок на 80 порту теперь просто редиректит на https. У вас return 301 стоял после if с rewrite, и несуществующие URL по http уходили в OpenCart без редиректа;
- убрал дубли: два одинаковых location для картинок, повторный set $root_path, повторный include с опечаткой (eburg.chernil.net.ru);

Перед заменой сохраните старый конфиг. После правки nginx -t и nginx -s reload. Если конфиг генерирует ISPmanager, при изменении настроек сайта в панели он может его перезаписать.
Всякие крутые модули под заказ и в наличии https://liveopencart.ru/nikifalex
Dimmam
Сообщения: 27
Зарегистрирован: 22.04.2026
Поблагодарил: 5 раз
Спасибо: 1 раз

Re: robots.php

Непрочитанное сообщение Dimmam »

Круто!!! Все заработало. Сейчас остальные домены настрою :)
Прямо не знаю как благодарить за помощь
Аватара пользователя
nikifalex
Разработчик дополнений
Сообщения: 424
Зарегистрирован: 17.03.2022
Откуда: Россия
Поблагодарил: 12 раз
Спасибо: 55 раз
Контактная информация:

Re: robots.php

Непрочитанное сообщение nikifalex »

Dimmam писал(а): ↑03 окт 2026, 07:14 Круто!!! Все заработало. Сейчас остальные домены настрою :)
Прямо не знаю как благодарить за помощь

если что, обращайтесь при необходимости https://liveopencart.ru/nikifalex
Всякие крутые модули под заказ и в наличии https://liveopencart.ru/nikifalex
Ответить