使用 .htaccess 中的重写规则匹配域名后 URL 路径中的数字

Matching numbers in the URL path directly following the domain name using a rewrite rule in .htaccess

我正在尝试通过捕获被 Google 索引的非规范 URL 来清理我们的 SEO。

这是我们的一个非规范 URL 的示例

https://www.umpqua.edu/184-about-ucc/facts-visitor-info?start=1 

我可以在 HTACCESS 文件中用这个正则表达式(见下文)捕获它,但它也禁用了我想使用的其他 URL。它捕获带有 /NUMBER- 的 URL。该号码的长度为两到三个字符。

/([0-9]{2,3})-

所以我想让它更独特。我试过这个(下面)但没有成功。我希望用 edu/NUMBER-

捕捉 URL
(edu)/([0-9]{2,3})-

我也试过了

(edu/)([0-9]{2,3})-

这是我的完整 HTACCESS 条目:

RewriteCond %{REQUEST_URI} ^(edu)/([0-9]{2,3})-$
RewriteRule .* index.php [G]

adding "edu" is just me trying make the RegEx more selective. So when I was using this expression /([0-9]{2,3})- it worked well except it also matched with this url. /component/weblinks/weblink/239-external-links/… but it should not have.

edu 的重要之处在于它在 URL-path 开始之前。 (但它不是 URL-path 的一部分,它是 Host header 的结尾部分。)在这种情况下,只需将正则表达式锚定到 URL-path 的开头.例如:

RewriteRule ^\d{2,3}- - [G]

这需要靠近根 .htaccess 文件的顶部。

\d只是[0-9]的缩写。请注意,上述指令中有 3 个参数,由 空格 :

分隔
  1. ^\d{2,3}- ... 匹配 URL-path
  2. 模式
  3. - ... 替换 字符串(在本例中为单个连字符)
  4. [G] ... 标志。在这种情况下,G 表示 goneR=410 的缩写)。

以上将为任何以 2 或 3 位数字开头后跟连字符的 URL-path 提供“410 Gone”。 substitution 字符串中有一个连字符明确表示“无替换”。在这里使用 index.php 是多余的,因为它会被忽略。

请注意,在 .htaccess.[=32 中使用 RewriteRule 模式 匹配的 URL-path 上没有斜杠前缀=]

您不需要单独的 条件RewriteCond 指令)- 比较可以 easily/efficiently 在 RewriteRule 指令中执行本身。

所以上面的代码会阻塞 /184-about-ucc/facts-visitor-info?start=1 但不会阻塞 /component/weblinks/weblink/239-external-links/...,因为第二个 URL 中的 3 位不会出现在 start 的 URL-path.