Nginxredirect问题

我的Nginx设置目前有这样的:

location / { if (!-e $request_filename){ rewrite ^/(.*)$ https://domain.com/index.php?id=$1 redirect; } } 

基本上对于不存在的页面(404),它将用户redirect到主页。 但是现在我在https://domain.com/blog/上有一个wordpress博客设置,但是任何wordpress项目,例如。 https://domain.com/blog/test也被redirect到主页。 我不知道如何解决这个问题?

如果您的博客位于http://yourblog.com/blog ,那么您需要将该指令设置为该path,除非您之前已将该指定指定为您的root目录(例如root /var/www/html/blog )。

你也不应该使用if语句。 这是一个常见的NGiNX陷阱。 。 使用try_files代替。

 location /blog { try_files $uri $uri/ /index.php?$args; } 

如果您不希望将/blog的子目录redirect,则可以使用位置指令中的=来限制redirect到特定的目录。

例如

 location = /blog { try_files $uri $uri/ /index.php?$args; } 

如果你想要search任何说“博客”,并应用相同的redirect,你可以使用/之前之后,以便它用作正则expression式。

例如

 location /blog/ { try_files $uri $uri/ /index.php?$args; } 

有关位置指令的更多信息可以在这里find。

根据这里的问题/答案和location的文档:

没有匹配正则expression式的语法。 相反,匹配目标正则expression式并分配一个空白块,然后使用位置/来匹配其他任何东西。

我会说,你需要有一个匹配/blog/和一个空块阻止redirect,类似的位置指令

 location /blog { }