gpt4 book ai didi

.htaccess - 在 RewriteRule 中匹配 HTTP_HOST 而不是使用 RewriteCond

转载 作者:行者123 更新时间:2023-12-04 06:40:43 31 4
gpt4 key购买 nike

我需要进行一堆 301 重定向,其中包含来自同一个 .htaccess 的不同域。文件。我可以为每个规则编写一个 RewriteCond,如下所示,它工作正常:

RewriteCond %{HTTP_HOST} www.domain1.com [NC]
RewriteRule old-url-1a.htm /new-url-1a [L,R=301]

RewriteCond %{HTTP_HOST} www.domain1.com [NC]
RewriteRule old-url-1b.htm /new-url-1b [L,R=301]

RewriteCond %{HTTP_HOST} www.domain2.com [NC]
RewriteRule old-url-2a.htm /new-url-2a [L,R=301]

RewriteCond %{HTTP_HOST} www.domain2.com [NC]
RewriteRule old-url-2b.htm /new-url-2b [L,R=301]

但是使用这种方法,我需要为每个 URL 编写 2 行代码,这会变得非常冗长和重复(相同的 RewriteCond 重复多次)。
有什么办法可以从 RewriteRule 指令本身匹配 HTTP_HOST 吗?沿着这些路线的东西(概念上):
RewriteRule www.domain1.com/old-url-1a.htm /new-url-1a [L,R=301]
RewriteRule www.domain1.com/old-url-1b.htm /new-url-1b [L,R=301]

RewriteRule www.domain2.com/old-url-2a.htm /new-url-2a [L,R=301]
RewriteRule www.domain2.com/old-url-2b.htm /new-url-2b [L,R=301]

谢谢。

最佳答案

Apache 文档说明了 RewriteRule:

What is matched?

The Pattern will initially be matched against the part of the URL after the hostname and port, and before the query string. If you wish to match against the hostname, port, or query string, use a RewriteCond with the %{HTTP_HOST}, %{SERVER_PORT}, or %{QUERY_STRING} variables respectively.



但是,如果您能够将规则放在 apache-config 中,还有另一种速记方式:您可以使用 RewriteMap。
RewriteMap     host-redirects   txt:/etc/apache2/host-redirects.map
RewriteRule ^/([^/]*).htm$ http://%{HTTP_HOST}/${host-redirects:%{HTTP_HOST}/$1|$1} [R,L]

host-redirects.map 看起来像这样:
www.domain1.com/old-url-1a.htm /new-url-1a/
www.domain1.com/old-url-1b.htm /new-url-1b/
www.domain2.com/old-url-2a.htm /new-url-2a/

关于.htaccess - 在 RewriteRule 中匹配 HTTP_HOST 而不是使用 RewriteCond,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4283645/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com