0

我的 Nginx 设置目前有这个:

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

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

4

2 回答 2

0

你不应该使用if. 请阅读 nginx wiki 上的IfIsEvil页面。相反,您应该使用try_files.

你的配置应该看起来更像这样:

location / {
    try_files $uri $uri/ @notfound
}

location @notfound {
    rewrite ^(.*)$ https://domain.com/index.php?id=$1 redirect; 
}

真的,你根本不应该这样做。相反,您应该设置自定义错误页面。将每个 404 重定向到主页对您的 SEO 不利。

编辑:我刚刚意识到您正在将 URL 传递给“id”。所以我删除了关于使用.而不是^(.*)$. 错误页面仍然是您最好的选择。$_SERVER['REQUEST_URI']您可以使用(如果您避免硬重定向)获取 URL 。

页面包含一些可能对您有所帮助的示例配置。它有一些 wordpress 配置。

于 2012-11-20T20:44:54.067 回答
0

为路径以'/blog/'开头的请求的url做一些不同的事情,添加一个相应的位置,如下所示:

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


location /blog/ {
    #add in whatever directives are needed to serve your wordpress
}
于 2012-11-21T09:33:16.937 回答