如何重定向(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,所以您已经处理好你的前端控制器端(我的意思是它将如何从后端等服务)。
我有这个当前场景
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,所以您已经处理好你的前端控制器端(我的意思是它将如何从后端等服务)。