从 URL 到达时,htaccess 无法重定向到子文件夹 Bing.Com

htaccess fails to redirect to subfolder when arriving from Bing.Com URL

提问人:John 提问时间:9/29/2023 最后编辑:John 更新时间:9/29/2023 访问量:21

问:

当我在 Bing.Com 中搜索相关页面(在我的 example.com 域上)时,单击显示该页面的 URL 在 Bing.Com 中包含以下基础长 URL:example.com/subfolder2/file.html

https://www.bing.com/ck/a?!&&p= .... a very long random code ... &ntb=1

我的服务器返回根 htaccess 中标识的内容。这意味着该搜索引擎缓存中的旧 URL 不会得到修复,并且用户会错过我的内容。missing.html

我的根目录上有一个 .htaccess 文件,目的是通过永久重定向来做这些事情

  • 移至example.com/subfolder/file.htmlsubfolder.example.com/file.html
  • 移至example.comwww.example.com
  • 如果未指定文件,则返回“index.html”

大多数情况下,我在 example.com 的根目录中使用了这个.htaccess代码:

ErrorDocument 403 http://www.example.com/missing.html
ErrorDocument 404 http://www.example.com/missing.html
ErrorDocument 500 http://www.example.com/missing.html

AddHandler server-parsed .html .htm .shtml .shtm
Options +FollowSymLinks -Indexes -MultiViews +Includes

DirectoryIndex index.html

RewriteEngine On
RewriteBase /

#move to subdomains
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^/?subfolder1/(.*)$ http://subfolder1.example.com/$1 [R=301]

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^/?subfolder2/(.*)$ http://subfolder2.example.com/$1 [R=301]

#if missing sub-domain, add "www"
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]

正如预期的那样,URL 工作正常,返回 .如果我在浏览器上输入,它也可以工作。www.example.com/subfolder/file.htmlsubfolder2.example.com/file.htmlexample.com/subfolder/file.html

我错过了什么?

注意:a)当我将htaccess代码添加到子文件夹时,它什么也没做;b) 我有 7 个不同的子域,每个子域都有自己的重写规则,而不是两个,所以我确信我在编写或执行重写时缺少一些效率;c) 我的服务器有HTTP服务;d) Bing 报告上的缓存版本为 ,并且;e) 我可能在谷歌搜索中遇到了同样的古怪结果,但它要么被冲走了,要么我无法复制/回忆起到底发生了什么。http://example.com/subfolder/file.html

谢谢!

.htaccess 重定向 必应

评论

0赞 CBroe 9/29/2023
不确定通过搜索结果访问您的 URL 与直接输入 URL 有何不同。它实际上是同一个 URL - 还是搜索引擎可能附加了跟踪参数,您的系统以某种方式无法处理?您没有做任何事情,例如在此处检查引荐来源,因此我看不出是什么原因导致此行为。如果您对服务器或至少具有虚拟主机配置的完全访问权限,那么我将启用一些重写日志记录,然后详细检查发生了什么。
0赞 CBroe 9/29/2023
顺便说一句,使用绝对 URL 指定 ErrorDocuments 不是一个好主意。Apache 将为这些 URL 发出重定向,然后客户端在请求您丢失的 .html 时将获得 200 OK 状态代码 - 因此他们永远不会获得正确的状态代码响应。
0赞 CBroe 9/29/2023
至于你的七个不同的子域,你可能会减少规则的数量。我猜它实际上不是子域和文件夹名称中的数字,而是其他东西?然后,您可以在相关位置进行交替,匹配 或 ,然后可以使用反向引用将该匹配项插入到重定向的主机名中。(假设子域的变量部分始终与文件夹名称相同。(abc|def)abcdef
0赞 John 10/1/2023
@CBroe......感谢您的输入。a) 必应提供长 URL,然后其服务器引用。我认为这是一种跟踪方法,我对此无能为力。b) 您建议的 errorDocuments reference 的替代方案是什么?c) 我有点遇到匹配问题,但从你那里得到一个样本线结构会有所帮助;我对语法没有完全掌握。然后,D)作为旁白,我应该在“[..]”中添加其他代码吗?为什么子文件夹HTACCESS中的行不被执行?
0赞 CBroe 10/4/2023
b) 相对 URL;以 / 开头,如果要引用您的域根目录。c) d) 不确定你在说什么。RewriteRule ^/?(abc|def)/(.*)$ http://$1.example.com/$2 [R=301]

答: 暂无答案