我如何 301 重定向子文件夹及其后的所有内容?

问题描述 投票:0回答:1

我正在尝试将子文件夹及其后的所有内容重定向到主页。

例如:

example.com/subfolder/extra-stuff
>
example.com

extra-stuff
不断变化并自动生成,所以我希望重定向也将其删除。

我正在使用:

Redirect 301 /subfolder(.*) http://www.example.com

但是,这会导致

http://www.example.com/extra-stuff

有没有办法让我说如果

/subfolder(and anything else after subfolder)
重定向到主页?

感谢您的建议!

.htaccess magento redirect
1个回答
2
投票

Redirect
指令使用简单的前缀匹配,并将匹配后的所有内容复制到目标 URL 的末尾(这就是您在此处看到的内容)。但是,
Redirect
指令也不支持正则表达式语法,因此像末尾的
(.*)
这样的“模式”实际上会匹配文字字符
(
.
*
)
- 这应该在你的例子中没有起作用?!

您需要使用

RedirectMatch
(也是 mod_alias 的一部分),它使用正则表达式匹配(不是简单的前缀匹配)。另请注意,虽然
Redirect
指令仅匹配整个路径段,但
RedirectMatch
没有这样的限制,因此我们必须将其构建到正则表达式中。

例如,要仅匹配

/subfolder
以及该子文件夹中的所有请求,您需要执行以下操作:

RedirectMatch 301 ^/subfolder($|/) http://www.example.com/

任何对

/subfolder
的请求(或任何以
/subfolder/
开头的内容)都将准确地重定向到
http://www.example.com/

正则表达式上的附加

($|/)
是必要的,以防止匹配根目录中仅以
/subfolder
开头的文件,例如。
/subfolderfoo.html
(这在您的环境中可能是也可能不是问题)。原始的
Redirect
指令也不会匹配此类请求。

在测试之前,您需要清除浏览器捕获,因为 301(永久)重定向会被浏览器永久缓存。 (首先使用 302 - 临时 - 重定向进行测试,以避免潜在的缓存问题。)


您将问题标记为“Magento”(可能正在使用 mod_rewrite)。但是,您应该注意,如果您已经使用 mod_rewrite 进行重写/重定向,那么您可能应该使用 mod_rewrite 而不是 mod_alias(

Redirect
RedirectMatch
)来执行此重定向,因为您可能会遇到冲突。

例如,等效的 mod_rewrite 指令是:

RewriteRule ^subfolder($|/) http://www.example.com/ [R=301,L]

请注意,

RewriteRule
模式上没有斜杠前缀。这需要靠近您的
.htaccess
文件的顶部。

© www.soinside.com 2019 - 2024. All rights reserved.