如何重定向(htaccess)目录中的所有 URL?
Posted
技术标签:
【中文标题】如何重定向(htaccess)目录中的所有 URL?【英文标题】:How to redirect (htaccess) all URLs from within a directory? 【发布时间】:2021-08-08 06:53:19 【问题描述】:我有这个当前的场景
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/(.*)$ /$1 [R=301,NC,L]
事实上!
我得到了这个工作,应该没问题吧?
我的意思是它运作良好,所以我想一切都很好,但是为了良好的秩序,这有什么问题吗:
RedirectMatch 301 ^/linux-distros/ https://www.example.com/
【问题讨论】:
【参考方案1】:让我们在这里了解这两种规则之间的区别:
第一种:当我们使用RewriteRule
时,规则如下:
RewriteEngine ON
RewriteRule ^linux-distros/(.*)$ /$1 [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
,因为您将 $1
传递给它,这是对规则左侧匹配正则表达式部分的反向引用。我相信你不想拥有它。
第 2 种类型: 现在让我们使用规则 RedirectMatch 301 ^/linux-distros/(.*)$ https://www.example.com/
并在 curl 命令中尝试相同的 URL(http://localhost:80/linux-distros/link-a
):
curl -IL "http://localhost:80/linux-distros/link-a/"
HTTP/1.1 301 Moved Permanently
Location: https://localhost/
我们可以清楚地看到它只转到没有链接-a 值的本地主机,这正是您正在寻找的,所以恕我直言,使用 RedirectMatch
将更适合这里。或者,如果您想使用RewriteRule
,那么您可以使用类似:
RewriteEngine ON
RewriteRule ^linux-distros/.*$ http://%HTTP_HOST [R=301,NC,L]
注意:我也希望这些规则重定向到您网站的基本 URI/URL,因此您已经照顾好您的前端控制器端(我表示它将如何从后端等提供服务)。
【讨论】:
以上是关于如何重定向(htaccess)目录中的所有 URL?的主要内容,如果未能解决你的问题,请参考以下文章
如何仅使用 .htaccess 将所有 url 重定向到 1 个 url
.htaccess:将根URL重定向到子目录,但保留根URL