Я использую 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;
}
}