我的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也被重定向到主页。我想知道如何解决这个问题?
答案 0 :(得分:0)
您不应该使用if
。请阅读nginx wiki上的IfIsEvil页面。相反,您应该使用try_files
。
您的配置应该更像这样:
location / {
try_files $uri $uri/ @notfound
}
location @notfound {
rewrite ^(.*)$ https://domain.com/index.php?id=$1 redirect;
}
真的,你根本不应该这样做。相反,您应该设置custom error页面。将每个404重定向到主页对您的SEO都不利。
编辑:我刚刚意识到你将URL传递给了“id”。所以我删除了关于使用.
而不是^(.*)$
的第二条评论。仍然是错误页面是你最好的选择。您可以使用$_SERVER['REQUEST_URI']
获取网址(如果您避免使用硬重定向)。
此page包含一些可能对您有帮助的示例配置。它有一些wordpress配置。
答案 1 :(得分:0)
为所请求的网址执行不同的操作,其路径以“/ blog /”开头,添加相应的位置,如下所示:
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
}