我的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 { }