【问题标题】:Apache / .htaccess | Rewriting a URL but the old URL still remains?阿帕奇/.htaccess |重写 URL 但旧 URL 仍然存在?
【发布时间】:2022-01-02 16:25:17
【问题描述】:

我的网站有一种不寻常的设置:

  • site.tld = Gatsby 网站,包含一些静态页面,例如 /example1 和 /example2 等。
  • site.tld/blog = WordPress 网站

现在我想让用户访问一个新页面site.tld/mynewpage,它实际上是 WordPress 网站上的一个页面。所以实际的 URL 是site.tld/blog/mynewpage

为了实现这一点,我定义了这条规则:

RewriteRule ^mynewpage/$ /blog/mynewpage/ [L]

哪种有效。当我浏览到 site.tld/mynewpage 时,它可以让我成功看到所需的 wordpress 页面。

我的预期是,如果我现在浏览到 site.tld/blog/mynewpage,它要么给我一个 404,要么它会“自动重定向”到 site.tld/mynewpage。但这些都没有发生。地址栏仍然显示site.tld/blog/mynewpage,我正确地看到了该页面。所以现在我有两个指向mynewpage 的链接。对于 SEO 这没什么大不了的,因为我可以将规范 URL 设置为 site.tld/mynewpage,但它困扰我的是,这个“旧 URL”site.tld/blog/mynewpage 仍然存在。

有没有办法解决这个问题?我天真地尝试从 site.tld/blog/mynewpage 重定向到 site.tld/mynewpage 但这给了我一个“重定向太多”,我认为这是因为它是一个无限循环。

任何帮助表示赞赏 =)

【问题讨论】:

  • 大概你有 2 个.htaccess 文件?一个在根目录,另一个在/blog 子目录?在您的示例中,您的 URL 上没有斜杠(即/mynewpage),但是,在您发布的指令中,您包含了一个斜杠(即/mynewpage/) - 它是什么?
  • 是的,正如你所说的那样,它是两个,并且已经处理了尾部斜杠,我对此没有任何问题。但是,是的,它实际上是带有斜杠。

标签: wordpress apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

您需要确保仅将“直接”请求重定向回根目录,而不是根.htaccess 文件中现有的重写请求重写(这将导致重定向循环)。

将以下内容添加到/blog/.htaccess 文件的顶部

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^mynewpage/$ /$0 [R=301,L]

这假定 URL 有一个尾部斜杠,就像在你的“工作”重写指令中一样。但是,您的所有示例都省略了斜杠?

乍一看,这可能“看起来”像是重定向到 same URL,但是,因为 .htaccess 文件位于子目录中,它确实从重定向的 URL 中删除了子目录。 IE。它从/blog/mynewpage/ 重定向到/mynewpage/

RewriteRule 模式 将 URL 路径 相对 匹配到 .htaccess 文件的位置。所以,由于我们在/blog 子目录中,正则表达式^mynewpage/$ 匹配/blog/mynewpage/ 的请求。我们使用$0 反向引用重定向回/mynewpage/,其中包含与RewriteRule 匹配的URL 路径模式

REDIRECT_STATUS 环境变量的检查确保只有直接请求(来自客户端)被重定向,而不是被现有重写重写的请求。

注意:首先使用 302(临时)重定向进行测试以避免缓存问题。

【讨论】:

  • 谢谢!这帮助了我。
【解决方案2】:

将 301 重定向添加到您的旧网址 - site.tld/blog/mynewpagesite.tld/mynewpage

可以通过 .htaccess 添加 301 重定向,如下所示

Redirect 301 /oldurl/ http://www.example.com/newurl/

如果您有自定义 php 页面,也可以尝试使用以下代码

<?php
header("Location: https://www.example.com/newurl", true, 301);
exit();
?>

【讨论】:

  • 我会尝试使用您的代码,但实际上我已经尝试过,因为它是一个无限循环,所以给了我“太多重定向”。
  • 检查您网页上的现有重定向或检查您的 htaccess 重定向。
猜你喜欢
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
相关资源
最近更新 更多