我正在尝试将子文件夹及其后的所有内容重定向到主页。
例如:
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)
重定向到主页?
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
文件的顶部。