【问题标题】:htaccess rule - How to match if URL doesn't contain specific stringhtaccess 规则 - 如果 URL 不包含特定字符串,如何匹配
【发布时间】:2012-05-15 02:52:57
【问题描述】:

我有一些网页具有以下 URL 结构:

/details/id/125/

由于某种原因,Google 已将看起来像 /details/125/ 的页面编入索引,而 /id/ 部分缺失。这会导致重复的内容问题。

所以我需要一个 .htaccess RedirectMatch 规则,以便如果 URL 包含 /details/ 但之后不包含 /id/,则重定向到 404 页面。

到目前为止我没有任何运气的尝试:

重定向匹配 404 ^/details/(?!id)/

在我的研究中,我发现了此信息 http://www.mycomputingart.com/programming/Z24.regexpadv.html,我认为这与我需要做的事情有关,但我无法理解它。

【问题讨论】:

标签: regex .htaccess negative-lookahead


【解决方案1】:

满足您的需求:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/details/.+$
RewriteRule !^/details/id/.+$ /b/ [R=404,L]

【讨论】:

  • 我很困惑。 /b/ 部分是干什么用的?我的页面具有不同的 url 结构,并且您列出的重写规则根本没有指定 /details/ 或 /id/ 段。根据我非常有限的知识,从外观上看,您的规则将捕获所有 URL。
  • 抱歉。就像我在我的服务器上检查一样粘贴)查看修改后的答案
  • 将它放在我的 htaccess 中只会给出错误 500 内部服务器错误。
  • 即使在 htaccess 测试工具htaccess.madewithlove.be 中测试代码也不起作用。使用您的代码在第一行尝试test.com/details/125。它说“不满足此条件”
  • 规则中/b/部分的作用是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 2011-03-14
  • 2019-06-05
  • 2011-01-22
  • 1970-01-01
相关资源
最近更新 更多