Вот два правила перезаписи:
Это работает
rewrite ^/knowledgebase/([0-9]+)/[a-z0-9_-]+.html$ /./knowledgebase.php?action=displayarticle&id=$1 last;
Этот не
rewrite ^/announcements/([0-9]+)/[a-z0-9_-]+.html$ /./announcements.php?id=$1 last;
Насколько я могу судить, разницы между ними нет. URL-адрес, который нужно переписать для объявлений:
/announcements/2/New-Site-Design.html
И следует переписать на:
/announcements.php?id=2
Я действительно не могу понять, как не работают объявления по сравнению с базой знаний. Будем признательны за любые советы.
=== Добавлен файл конфигурации - мой домен
#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;
}
В приведенном выше файле конфигурации я заменил ссылки на свой домен на «сайт».
=== Редактировать
Вот строка журнала ошибок
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"
Таким образом, правило перезаписи просто не действует для /announcements/id/page-title.html
Moving-to-a-new-server
содержит заглавную M
, и последнее, что я помню, правила перезаписи чувствительны к регистру.
Я предполагаю, но когда вы тестировали его с knowledgebase
вы указали только последнюю часть в нижнем регистре.
Если да, попробуйте следующее:
rewrite ^/announcements/([0-9]+)/[a-zA-Z0-9_-]+.html$ /./announcements.php?id=$1 last;
и сделайте аналогичное изменение для knowledgebase
. Вы могли бы просто использовать .*?
вместо конкретного выражения для второй части, поскольку вы на самом деле не собираетесь его нигде использовать (хотя оно соответствует большему количеству символов).
Джей прав в своем ответе о столице M
. Причина, по которой запись работает в базе знаний, заключается в том, что эта перезапись соответствует:
rewrite ^/knowledgebase/([0-9]+)/([^/]*)$ /./knowledgebase.php?action=displaycat&catid=$1 last;
И не этот:
rewrite ^/knowledgebase/([0-9]+)/[a-z0-9_-]+.html$ /./knowledgebase.php?action=displayarticle&id=$1 last;
[^/]
отрицательное совпадение, что означает совпадение всего не соответствие /
, что объясняет, почему ваш запрос /knowledgebase/1/General-Terms-of-Service.html
был переписан, но не /announcements/2/New-Site-Design.html