![Nginx – 将所有 URL 重定向到根目录(在 URL 中不显示 HTML 页面?)](https://linux22.com/image/604131/Nginx%20%E2%80%93%20%E5%B0%86%E6%89%80%E6%9C%89%20URL%20%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E6%A0%B9%E7%9B%AE%E5%BD%95%EF%BC%88%E5%9C%A8%20URL%20%E4%B8%AD%E4%B8%8D%E6%98%BE%E7%A4%BA%20HTML%20%E9%A1%B5%E9%9D%A2%EF%BC%9F%EF%BC%89.png)
我需要将之前运行 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;