Настройка ЧПУ nginx для DLE + Xenforo

hottabov

Участники
Сообщения
1
Реакции
0
Баллы
5,503
Не нашел здесь готового решения настройки nginx для DLE + Xenforo, поэтому выкладываю свой конфиг, возможно, кому-то пригодится. На уникальность и лучшее решение не претендую, просто выкладываю то, что работает лично у меня.

Задача:
Заставить работать ЧПУ на DLE и Xenforo без Apache, используя nginx + php-fpm.

Исходные данные:
  • ISPmanager
  • php5-fpm + nginx
  • Форум лежит в папке /forum/
  • Связка двух движков - от Калиостро или любая другая (благо их уже парочка есть на просторах) или вообще без связки.
Для того, чтобы все заработало как надо, я на один location повесил конфиг DLE, на другой - Xenforo.

В ISPmanager: WWW-домены - выделить домен - Конфиг.

Код:
server {
    server_name megasite.ru www.megasite.ru;
    ssl on;  # Если SSL не используется, удаляем все строки, начинающиеся на ssl
    ssl_certificate "/var/www/httpd-cert/megasite/megasite.ru.crt";
    ssl_certificate_key "/var/www/httpd-cert/megasite/megasite.ru.key";
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    add_header Strict-Transport-Security "max-age=31536000;";
    charset UTF-8;
    index index.html index.php;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/megasite.ru/*.conf;
    access_log /home/httpd-logs/megasite.ru.access.log;
    error_log /home/httpd-logs/megasite.ru.error.log notice;
    ssi on;
    set $root_path /home/megasite/data/megasite.ru/public;
    root $root_path;
    listen 79.79.79.79:443; # Ваш IP. Если SSL не используется, то ставим порт 80.

    # Xenforo     
    location /forum/ {
        try_files $uri $uri/ /forum/index.php?$uri&$args;
        index index.php index.html;
    }
    location ~ /forum/(internal_data|library) {
              internal;
       }
 
    # DLE
    location / {
        # Редиректы
        rewrite "^/page/([0-9]+)(/?)$" /index.php?cstart=$1 last;

        # Сам пост
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6&seourl=$6 last;
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 last;
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$" /engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 last;
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4&seourl=$4 last;
        rewrite "^/([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 last;
        rewrite "^/([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 last;
        rewrite "^/([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /engine/print.php?news_page=$2&newsid=$3&seourl=$4&seocat=$1 last;
        rewrite "^/([^.]+)/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2&seourl=$3&seocat=$1 last;
        rewrite "^/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 last;
        rewrite "^/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2&news_page=$1&seourl=$3 last;
        rewrite "^/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /engine/print.php?news_page=$1&newsid=$2&seourl=$3 last;
        rewrite "^/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$1&seourl=$2 last;

        # За день
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2&day=$3 last;
        rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&day=$3&cstart=$4 last;

        # За весь месяц
        rewrite "^/([0-9]{4})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2 last;
        rewrite "^/([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&cstart=$3 last;

        # Вывод за весь год
        rewrite "^/([0-9]{4})(/?)+$" /index.php?year=$1 last;
        rewrite "^/([0-9]{4})/page/([0-9]+)(/?)+$" /index.php?year=$1&cstart=$2 last;

        # вывод отдельному тегу
        rewrite "^/tags/([^/]*)(/?)+$" /index.php?do=tags&tag=$1 last;
        rewrite "^/tags/([^/]*)/page/([0-9]+)(/?)+$" /index.php?do=tags&tag=$1&cstart=$2 last;

        # поиск по доп полям
        rewrite "^/xfsearch/(.*)/page/([0-9]+)(/?)+$" /index.php?do=xfsearch&xf=$1&cstart=$2 last;
        rewrite "^/xfsearch/(.*)(/?)+$" /index.php?do=xfsearch&xf=$1 last;

        # вывод для отдельного юзера
        rewrite "^/user/([^/]*)/rss.xml$" /engine/rss.php?subaction=allnews&user=$1 last;
        rewrite "^/user/([^/]*)(/?)+$" /index.php?subaction=userinfo&user=$1 last;
        rewrite "^/user/([^/]*)/page/([0-9]+)(/?)+$" /index.php?subaction=userinfo&user=$1&cstart=$2 last;
        rewrite "^/user/([^/]*)/news(/?)+$" /index.php?subaction=allnews&user=$1 last;
        rewrite "^/user/([^/]*)/news/page/([0-9]+)(/?)+$" /index.php?subaction=allnews&user=$1&cstart=$2 last;
        rewrite "^/user/([^/]*)/news/rss.xml(/?)+$" /engine/rss.php?subaction=allnews&user=$1 last;

        # вывод всех последних новостей
        rewrite "^/lastnews(/?)+$" /index.php?do=lastnews last;
        rewrite "^/lastnews/page/([0-9]+)(/?)+$" /index.php?do=lastnews&cstart=$1 last;

        # вывод в виде каталога
        rewrite "^/catalog/([^/]*)/rss.xml$" /engine/rss.php?catalog=$1 last;
        rewrite "^/catalog/([^/]*)(/?)+$" /index.php?catalog=$1 last;
        rewrite "^/catalog/([^/]*)/page/([0-9]+)(/?)+$" /index.php?catalog=$1&cstart=$2 last;

        # вывод непрочитанных статей
        rewrite "^/newposts(/?)+$" /index.php?subaction=newposts last;
        rewrite "^/newposts/page/([0-9]+)(/?)+$" /index.php?subaction=newposts&cstart=$1 last;

        # вывод избранных статей
        rewrite "^/favorites(/?)+$" /index.php?do=favorites last;
        rewrite "^/favorites/page/([0-9]+)(/?)+$" /index.php?do=favorites&cstart=$1 last;
        rewrite "^/rules.html$" /index.php?do=rules last;
        rewrite "^/statistics.html$" /index.php?do=stats last;
        rewrite "^/addnews.html$" /index.php?do=addnews last;
        rewrite "^/rss.xml$" /engine/rss.php last;
        rewrite "^/sitemap.xml$" /uploads/sitemap.xml last;

        if (!-d $request_filename) {
                rewrite "^/([^.]+)/page/([0-9]+)(/?)+$" /index.php?do=cat&category=$1&cstart=$2 last;
                rewrite "^/([^.]+)/?$" /index.php?do=cat&category=$1 last;
        }

        if (!-f $request_filename) {
                rewrite "^/([^.]+)/rss.xml$" /engine/rss.php?do=cat&category=$1 last;
                rewrite "^/page,([0-9]+),([^/]+).html$" /index.php?do=static&page=$2&news_page=$1 last;
                rewrite "^/print:([^/]+).html$" /engine/print.php?do=static&page=$1 last;
        }

        if (!-f $request_filename) {
                rewrite "^/([^/]+).html$" /index.php?do=static&page=$1 last;
        }
    }   
    
    location ~ \.php$ {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]";
        fastcgi_pass unix:/var/www/php-fpm/megasite.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }

}

Возможно, кто-то нашел лучшее решение, буду рад его увидеть.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу