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

Переписывание Nginx с помощью Simple Machines Forum

Я использую Nginx 1.5.6 и программное обеспечение Simple Machines Forum. Кажется, что большинство правил перезаписи работают правильно, за исключением RSS-каналов.

В моей конфигурации Nginx у меня есть следующая строка, которая должна обрабатывать URL-адреса, содержащие «.xml»:

rewrite ^/forum/(\.xml|xmlhttp)/?$ "/forum/index.php?pretty;action=$1" last;

Приведенное выше правило создает следующий URL-адрес для основного форума, который возвращает ошибку 403: http://www.mydomain.com/forum/.xml/?type=rss

Я хотел бы, чтобы правило перезаписи создавало этот тип URL-адреса, который возвращает код 200 (реальная страница): http://www.mydomain.com/forum/?type=rss;action=.xml

Вот весь блок, относящийся к переписыванию форума: http://pastebin.com/raw.php?i=tZkAibW3

Я был бы очень признателен за помощь в создании правила перезаписи для этого. Спасибо.

Вы не можете включить строку запроса в свой rewrite пункт (для этого потребуется map или if). Как насчет чего-то вроде следующего?

rewrite ^/forum/rss\.xml$ /forum/index.php?pretty;action=.xml last;

Ваши пользователи могут получить доступ к вашей ленте напрямую через http://mydomain.com/forum/rss.xml


Что ж, Simple Machines - ужасный беспорядок, но просто не существует ни одного хорошего программного обеспечения для форумов (всегда думал о запуске моего собственного проекта с открытым исходным кодом для этой задачи).

Пожалуйста, попробуйте следующее (исправляя свое зло if использование):

server {
  location / {
    location ~ /forum/ {
      location ~ /forum/(\.xml|xmlhttp) {
        if ($args ~ type=rss) {
          rewrite ^/(.*)$ /forum/index.php?pretty;action=$1 last;
          try_files $uri @forum;
        }
      }
      try_files $uri @forum;
    }
  }
  location @forum {
    # Rules for: profiles
    rewrite ^/forum/profile/([^/]+)/?$ "/forum/index.php?pretty;action=profile;user=$1" last;

    # Rules for: actions
    rewrite ^/forum/(activate|admin|ads|announce|attachapprove|ban|boardrecount|buddy|calendar|clock)/?$ "/forum/index.php?pretty;action=$1" last;
    rewrite ^/forum/(collapse|convertentities|coppa|credits|deletemsg|detailedversion|display|dlattach|editpoll|editpoll2)/?$ "/forum/index.php?pretty;action=$1" last;
    rewrite ^/forum/(emailuser|featuresettings|findmember|groups|help|helpadmin|im|jseditor|jsmodify)/?$ "/forum/index.php?pretty;action=$1" last;
    rewrite ^/forum/(jsoption|lock|lockvoting|login|login2|logout|manageboards|managecalendar|managesearch|manageattachments|maintain|markasread|mascot)/?$ "/forum/index.php?pretty;action=$1" last;
    rewrite ^/forum/(membergroups|mergetopics|mlist|moderate|modifycat|modifykarma|movetopic|movetopic2|news|notify)/?$ "/forum/index.php?pretty;action=$1" last;
    rewrite ^/forum/(notifyboard|optimizetables|openidreturn|packages|permissions|pm|post|postsettings|post2|printpage|profile|quotefast)/?$ "/forum/index.php?pretty;action=$1" last;
    rewrite ^/forum/(quickmod|quickmod2|recent|regcenter|register|register2|reminder|removepoll|removetopic2)/?$ "/forum/index.php?pretty;action=$1" last;
    rewrite ^/forum/(repairboards|reporttm|requestmembers|restoretopic|reports|search|search2|sendtopic|serversettings|smileys|smstats|suggest)/?$ "/forum/index.php?pretty;action=$1" last;
    rewrite ^/forum/(spellcheck|splittopics|stats|sticky|theme|trackip|about:mozilla|about:unknown)/?$ "/forum/index.php?pretty;action=$1" last;
    rewrite ^/forum/(unread|unreadreplies|verificationcode|viewErrorLog|viewmembers|viewprofile|vote|viewquery|viewsmfile|who)/?$ "/forum/index.php?pretty;action=$1" last;

    # Rules for: boards
    rewrite ^/forum/([-_!~*'()$a-zA-Z0-9]+)/?$ "/forum/index.php?pretty;board=$1.0" last;
    rewrite ^/forum/([-_!~*'()$a-zA-Z0-9]+)/([0-9]*)/?$ "/forum/index.php?pretty;board=$1.$2" last;

    # Rules for: topics
    rewrite ^/forum/([-_!~*'()$a-zA-Z0-9]+)/([-_!~*'()$a-zA-Z0-9]+)/?$ "/forum/index.php?pretty;board=$1;topic=$2.0" last;
    rewrite ^/forum/([-_!~*'()$a-zA-Z0-9]+)/([-_!~*'()$a-zA-Z0-9]+)/([0-9]*|msg[0-9]*|new)/?$ "/forum/index.php?pretty;board=$1;topic=$2.$3" last;

    rewrite ^/(.*)$ /index.php?params=$1 last;
  }
}