Nginx reescreve regras, algumas funcionam, outras não

1

Aqui estão as duas regras de reescrita:

Este aqui funciona

rewrite ^/knowledgebase/([0-9]+)/[a-z0-9_-]+.html$ /./knowledgebase.php?action=displayarticle&id=$1 last;

Este não faz

rewrite ^/announcements/([0-9]+)/[a-z0-9_-]+.html$ /./announcements.php?id=$1 last;

Não há diferença entre os dois, tanto quanto eu posso ver. O URL a ser reescrito para anúncios é:

/announcements/2/New-Site-Design.html

E deve ser reescrito para:

/announcements.php?id=2

Eu realmente não consigo ver como os anúncios não funcionam em comparação com o da base de conhecimento. Alguma dica seria muito apreciada.

=== Adicionado arquivo de configuração - meu domínio

#HTTP
server {

    listen 80;
    server_name portal2.website.co.uk website.co.uk www.website.co.uk;

    access_log /var/log/nginx/website.access_log;
    error_log /var/log/nginx/website.error_log;

    root /var/www/website.co.uk/www;
    index index.php index.htm index.html;

    location ~ .php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www/website.co.uk/www$fastcgi_script_name;
        include fastcgi_params;
    }

    rewrite ^/announcements$ /./announcements.php last;
    rewrite ^/announcements/([0-9]+)/[a-z0-9_-]+.html$ /./announcements.php?id=$1 last;

    rewrite ^/knowledgebase$ /./knowledgebase.php last;
    rewrite ^/knowledgebase/([0-9]+)/[a-z0-9_-]+.html$ /./knowledgebase.php?action=displayarticle&id=$1 last;
    rewrite ^/knowledgebase/([0-9]+)/([^/]*)$ /./knowledgebase.php?action=displaycat&catid=$1 last;

    rewrite ^/downloads$ /./downloads.php last;
    rewrite ^/downloads/([0-9]+)/([^/]*)$ /./downloads.php?action=displaycat&catid=$1 last;

}

No arquivo de configuração acima, substituí as referências ao meu domínio por 'website'

=== Editar

Aqui está a linha do log de erros

2012/06/28 11:40:04 [error] 29095#0: *7 open() "/var/www/website.co.uk/www/announcements/6/Moving-to-a-new-server.html" failed (2: No such file or directory), client: 92.232.232.25, server: portal2.website.co.uk, request: "GET /announcements/6/Moving-to-a-new-server.html HTTP/1.1", host: "portal2.website.co.uk"

Assim, a regra de regravação não está funcionando corretamente em /announcements/id/page-title.html

    
por Lawrence Goldstien 28.06.2012 / 10:46

2 respostas

1

Moving-to-a-new-server contém um M e, por último, lembro que as regras de reconfiguração diferenciam maiúsculas e minúsculas.

Eu estou tentando adivinhar, mas quando você estiver testando com knowledgebase você apenas forneceu a última parte em letras minúsculas.

Se sim, tente isto:

rewrite ^/announcements/([0-9]+)/[a-zA-Z0-9_-]+.html$ /./announcements.php?id=$1 last;

e faça uma alteração semelhante para knowledgebase . Você poderia usar apenas .*? em vez de uma expressão específica para a segunda parte, já que você não vai usá-la em lugar algum (ela corresponderia a mais símbolos, no entanto).

    
por 28.06.2012 / 13:09
0

Jay está correto em sua resposta sobre o capital M . A razão pela qual a escrita funciona na base de conhecimento é porque esta é a reescrita que é correspondida:

rewrite ^/knowledgebase/([0-9]+)/([^/]*)$ /./knowledgebase.php?action=displaycat&catid=$1 last;

E não este:

rewrite ^/knowledgebase/([0-9]+)/[a-z0-9_-]+.html$ /./knowledgebase.php?action=displayarticle&id=$1 last;

[^/] é uma correspondência negativa, o que significa corresponder a tudo não correspondendo / , o que explica por que sua solicitação para /knowledgebase/1/General-Terms-of-Service.html foi reescrita, mas não /announcements/2/New-Site-Design.html

    
por 28.06.2012 / 13:24

Tags