将规则从Apache转换为Nginx

时间:2018-10-04 14:33:49

标签: php html apache nginx web

我已将服务器从Apache切换到Nginx。

一切正常,除了最后一点。

在Apache中,我有以下规则:

RewriteRule ^event/(.*)$ /event.html [L]
RewriteRule ^/event/(.*)$ /event.html [L]
RewriteRule ^venue/(.*)$ /venue.html [L]
RewriteRule ^/venue/(.*)$ /venue.html [L]
RewriteRule ^calendar/day/(.*)$ /calendar/day.html [L]
RewriteRule ^/calendar/day/(.*)$ /calendar/day.html [L]
RewriteRule ^calendar/month/(.*)$ /calendar/month.html [L]
RewriteRule ^/calendar/month/(.*)$ /calendar/month.html [L]

但是在Nginx中无法正确处理它们。以下是实现:

location /event {
  rewrite ^/event/(.*)$ /event.html break;
  rewrite ^/event/(.*)$ /event.html break;
}

location /venue {
  rewrite ^/venue/(.*)$ /venue.html break;
  rewrite ^/venue/(.*)$ /venue.html break;
}

location /calendar {
  rewrite ^/calendar/day/(.*)$ /calendar/day.html break;
  rewrite ^/calendar/day/(.*)$ /calendar/day.html break;
  rewrite ^/calendar/month/(.*)$ /calendar/month.html break;
  rewrite ^/calendar/month/(.*)$ /calendar/month.html break;
}

但是访问上述内容后,我将重定向到主页。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

由于已经通过location进行了定义,因此好像斜杠后的路径是重复的。简单尝试一下:

location / {
    rewrite ^/event/(.*)$ /event.html last;
    rewrite ^/venue/(.*)$ /venue.html last;
    rewrite ^/calendar/day/(.*)$ /calendar/day.html last;
    rewrite ^/calendar/month/(.*)$ /calendar/month.html last;
}