我尝试了几个小时,在 htaccess 中将文件夹的每个页面重定向到新的 url,匹配该文件夹,但似乎我绝对不明白正则表达式和重定向的任何内容!
我想将文件夹 /folder/ 中的任何页面重定向到完全不同的网址 类似的东西
RedirectMatch 301 ^/folder$ https://www.mynewdomain.com/id/2176
为了将
https://www.myolddomain.com/folder/123.html
重定向到 https://www.mynewdomain.com/id/2176
我不想保留以前的网址的任何内容,只需将 this 文件夹的任何页面重定向到特定网址即可。
有人可以帮忙吗? 谢谢
我试过了
RewriteEngine On
RewriteRule /folder/ https://www.mynewdomain.com/id/2176
但它不起作用,当我到达包含/folder/的网址时,我没有被重定向。试过
RewriteRule ^/folder(/)?$ https://www.mynewdomain.com/id/2176 [R=301,L]
RedirectMatch 301 ^/folder$ https://www.mynewdomain.com/id/2176
字符串结尾锚点 (
$
) 标记匹配的 URL 路径的结尾。所以,这匹配 /folder
而没有其他。您需要删除字符串末尾的锚点。 IE。 ^/folder
。因此这会匹配任何以 /folder
开头的 URL 路径。但是,这可能会匹配太多,因为它还会匹配根目录中仅以文本 folder
开头的任何文件(在您的情况下,这可能是问题,也可能不是问题)。要避免这种情况并仅匹配对该文件夹(和子文件夹)内的文件夹和文件的请求,请改用正则表达式 ^/folder($|/)
。
请注意,
RedirectMatch
是一个mod_alias指令。
RewriteRule /folder/ https://www.mynewdomain.com/id/2176
而
RewriteRule
是 mod_rewrite 指令。在 .htaccess
中,与 RewriteRule
pattern 匹配的 URL 路径不以斜线开头。因此,您需要匹配 URL 路径 folder/
(而不是 /folder/
)。
将以上几点结合在一起,如果您使用 mod_rewrite 那么您将需要以下内容:
RewriteRule ^folder($|/) https://www.mynewdomain.com/id/2176 [R=301,L]
另请注意添加了 flags 参数。这是永久 301 重定向。因此会被浏览器查到。
您应该始终使用 302(临时)重定向进行测试,以避免缓存问题。