使用 .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 个参数,由 空格 :
分隔
^\d{2,3}-
... 匹配 URL-path 的 模式
-
... 替换 字符串(在本例中为单个连字符)
[G]
... 标志。在这种情况下,G
表示 gone
(R=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.
我正在尝试通过捕获被 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-
(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 个参数,由 空格 :
^\d{2,3}-
... 匹配 URL-path 的 模式
-
... 替换 字符串(在本例中为单个连字符)[G]
... 标志。在这种情况下,G
表示gone
(R=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.