如何使用htaccess将双URL重定向到单URL

时间:2018-09-20 06:51:34

标签: .htaccess redirect

Google Search Console显示“ 404页面未找到”错误

https://example.com/page/https://example.com/page/

并且链接来自外部网站。

我想用.htaccess重定向:

https://example.com/page/https://example.com/page/

https://example.com/page/

有人可以在这方面帮助我吗?

1 个答案:

答案 0 :(得分:0)

.htaccess文件顶部尝试以下mod_rewrite指令:

RewriteEngine On
RewriteRule ^(.*?)https?:/ /$1 [R=301,L]

这只会删除以http:/(或https:/)开头的URL路径上的任何结尾部分。

更新:捕获子模式?中的(.*?)使它变得非贪婪,因此它最多只能捕获https:/的第一次出现并丢弃其余的,而不是直到所有出现的https:/被删除为止,直到最后一次出现(贪婪)和循环(重定向循环)。

其他说明:

  • 使用302(临时)重定向的第一个测试,以确保它可以正常工作。确认后仅更改为301,以避免缓存问题。

  • RewriteRule 模式匹配的URL路径已经将斜杠序列减少为单个斜杠,因此您无法匹配// (双斜线)在此处(但我认为您不需要这样做)。

  • 如果涉及查询字符串,那么您可能需要稍微不同的方法和另一条指令,因为查询字符串本身(与URL路径相对)可能包含需要删除的“重复URL” (我们首先需要看一个例子)。 RewriteRule 模式仅与URL路径匹配,而不与查询字符串匹配。

  • 在Windows上:如果(方案和)冒号(:)出现在第一个路径段中(即,格式错误的链接用于文档根目录),那么Apache将生成403 Forbidden 之前 .htaccess能够重定向。您无法避免这种情况,因为这是操作系统的限制(文件系统路径中不允许使用分号-当Apache尝试将URL映射到文件系统路径时会出现403)。在Linux上不会发生这种情况。例如:https://example.com/https://example.com/


更新:如果您没有看到重定向,只是一个404,则可能需要在URL上启用其他路径名信息(PATH_INFO)。例如,在您的.htaccess文件的顶部:

AcceptPathInfo On