【问题标题】:Eliminate duplicate directory name in url using .htaccess file使用 .htaccess 文件消除 url 中重复的目录名称
【发布时间】:2020-10-30 03:18:20
【问题描述】:

由于某种原因,我在我们网站的子文件夹中的某些 url 中获得了重复的目录名称。这似乎只影响爬虫,因为该目录中的文件在导航时可以正常工作。

我想简单地删除重复的目录名称并将 mydomain.com/sub/sub 重定向到 mydomain.com/sub。

我尝试了很多版本,但我的 .htaccess 技能显然缺乏。我目前有(当然不工作):

RewriteRule ^mydomain.com/sub/sub/(.*) mydomain.com/sub/$1  [L,R=301]

【问题讨论】:

  • 你不能把 mydomain.com.这里也有很多变数。见stackoverflow.com/questions/32456587/…
  • 是的,我试过没有域。感谢您的链接。我在该示例中看到了 url 是如何拆分和重新组装的,但是如果我做类似的事情,它将不起作用: RewriteRule ^(.+?/sub)/sub(/.*)?$ $1$2 [L,NC,R =301]
  • 您试图治愈症状而不是解决实际问题。这很少是一个好主意。你为什么不找出真正的问题是什么,那么那些错误的 URL 是从哪里来的?
  • 简短的回答是权宜之计,该子目录中的框架不是我的,而且在我看来记录很差。我已经投入时间研究根本原因,但结果不足。希望对语法有一点帮助,因为除了简单的重定向之外,我很少从事任何真正的 htaccess 工作......
  • 对于语法帮助,我实际上会指向重写模块的文档。作为开源解决方案的典型代表,它具有卓越的品质并提供了很好的示例......

标签: .htaccess url redirect


【解决方案1】:
RewriteRule ^mydomain.com/sub/sub/(.*) mydomain.com/sub/$1  [L,R=301]

RewriteRule 模式 仅与 URL 路径匹配 - 您似乎已包含(部分)域名。此外,替换字符串中的mydomain.com将被视为相对子目录

假设发生这种情况的子目录数量有限,然后将/sub/sub/<something> 减少到仅/sub/<something>,您将执行以下操作:

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

如果您的 .htaccess 文件中有其他指令,那么这需要靠近顶部。

使用 302(临时)重定向进行首次测试,以避免潜在的缓存问题。测试前清除浏览器缓存。

但要回应 @arkascha 的评论...爬虫首先找到这些 URL 的原因似乎是您的 URL 结构/内部链接有问题 - 所以这是最终需要修复的问题。

【讨论】:

    猜你喜欢
    • 2019-06-19
    • 2020-05-11
    • 1970-01-01
    • 2016-05-06
    • 2017-02-17
    • 1970-01-01
    • 2020-04-30
    • 2020-01-31
    • 2016-04-13
    相关资源
    最近更新 更多