Nginx – 将所有 URL 重定向到根目录(在 URL 中不显示 HTML 页面?)

Nginx – 将所有 URL 重定向到根目录(在 URL 中不显示 HTML 页面?)

我需要将之前运行 wordpress 的网站转变为单页网站。我的网站只能包含一个登录页面,我希望所有旧 URL 都 301 重定向到我的网站根目录。

我已经成功了,但不是我想要的效果。目前,所有内容都重定向到 mysite.com/index.html,但我希望它直接指向 mysite.com。

这是我在我的位置 / {} 标签中使用的重定向代码:

try_files $uri $uri/ /index.php?q=$uri&$args;
            if ( $uri !~ ^/(index\.php|css|images|uploads|js|robots\.txt|favicon\.ico|wp-admin|launch|wp-login\.php|inc) ) {
                    rewrite ^ http://www.mysite.com/index.html permanent;
            }

这段代码重定向了除我列出的特定目录和文件之外的所有内容。这样,我仍然可以访问我的 wp-admin 目录以向 Wordpress 添加内容,因此当我稍后拉动开关时,我可以重新打开网站并更新所有内容并准备发布。

如果我从上面的重定向中删除 index.html,我的网站就会陷入重定向循环。如果我将重写规则设置为仅指向 /,那么我的网站也会陷入重定向循环。

有人能帮我更新代码,让 index.html 不会在浏览器窗口中显示实际 URL 吗?我非常希望实际 URL 是 www.mysite.com,而不是 www.mysite.com/index.html。

编辑:

我真正需要的是在我的 !~ 语句中指定根目录。但是如果我添加 |/|,它将允许忽略所有文件和子目录...这意味着我的重定向规则永远不会被调用。

我可以只指定根目录,而不包含该根目录内的任何文件或子目录吗?这样,我可以告诉 nginx 不要重定向到我的域的 /,但如果它找到 /index.html,它将重定向到 /。

答案1

我认为有两种方法:

  • 添加|$到正则表达式
  • 设置location = /并使其在你使用的任何 PHP 后端上运行 /index.php(可能通过设置fastcgi_param SCRIPT_FILENAME .../index.php;

相关内容