如何重定向(htaccess)目录中的所有 URL?

How to redirect (htaccess) all URLs from within a directory?

我有这个当前场景

Redirect 301 /linux-distros/link-a/ https://www.example.com/
Redirect 301 /linux-distros/link-b/ https://www.example.com/
Redirect 301 /linux-distros/link-c/ https://www.example.com/

但肯定更好的方法是为该目录中的所有 URL 做一个通配符?

我在想类似的东西会奏效,但奇怪的是它没有...

知道为什么吗?

RewriteRule ^linux-distros/(.*)$ / [R=301,NC,L]

事实上!

我让它工作了,应该没问题吧?

我的意思是它运作良好所以我想一切都很好,但是为了良好的秩序,这有什么问题吗:

RedirectMatch 301 ^/linux-distros/ https://www.example.com/

让我们在这里了解这两种规则之间的区别:

第一种类型: 当我们使用如下RewriteRule规则时:

RewriteEngine ON
RewriteRule ^linux-distros/(.*)$ / [R=301,NC,L]

现在,当我在我的本地主机上使用 curl 命令(您也可以在浏览器中检查它,我正在检查 Linux 终端)时,我在输出中得到以下信息:

curl -IL "http://localhost:80/linux-distros/link-a/"
HTTP/1.1 301 Moved Permanently
Location: http://localhost/link-a/

我们可以清楚地看到它将 URL 转换为 localhost/link-a,因为您将 </code> 传递给它,这是对规则左侧匹配的正则表达式部分的反向引用。我相信你不想拥有它。</p> <p><em><strong>第二种类型:</strong></em> 现在让我们使用规则 <code>RedirectMatch 301 ^/linux-distros/(.*)$ https://www.example.com/ 并尝试相同的 URL(http://localhost:80/linux-distros/link-a) 在 curl 命令中:

curl -IL "http://localhost:80/linux-distros/link-a/"
HTTP/1.1 301 Moved Permanently
Location: https://localhost/

我们可以清楚地看到它只转到没有 link-a 值的本地主机,这正是您正在寻找的,所以恕我直言,使用 RedirectMatch 更适合这里。或者如果你想使用 RewriteRule 那么你可以使用类似的东西:

RewriteEngine ON
RewriteRule ^linux-distros/.*$ http://%{HTTP_HOST} [R=301,NC,L]

注意: 我也希望因为这些规则重定向到您网站的基础 URI/URL,所以您已经处理好你的前端控制器端(我的意思是它将如何从后端等服务)。