Redirect 通配符301子文件夹重定向到具有字符替换的查询

Redirect 通配符301子文件夹重定向到具有字符替换的查询,redirect,mod-rewrite,replace,character,wildcard,Redirect,Mod Rewrite,Replace,Character,Wildcard,我需要使用.htaccess文件执行通配符301重定向,从文件夹重定向到查询,并替换字符 我需要mydomain.com/XXX/重定向后的所有文件夹,但子文件夹名称中的连字符改为加号 例如 mydomain.com/XXX/所有子文件夹/ 重定向到 mydomain.com/XXX/?s=all+子文件夹 因此,我基本上是将XXX文件夹之后的所有文件夹转换为搜索查询,并将所有“-”替换为“+” 因此,如果有人点击以下链接: mydomain.com/XXX/冷啤酒/ 它们被重定向到搜索查询 m

我需要使用.htaccess文件执行通配符301重定向,从文件夹重定向到查询,并替换字符

我需要mydomain.com/XXX/重定向后的所有文件夹,但子文件夹名称中的连字符改为加号

例如

mydomain.com/XXX/所有子文件夹/

重定向到

mydomain.com/XXX/?s=all+子文件夹

因此,我基本上是将XXX文件夹之后的所有文件夹转换为搜索查询,并将所有“-”替换为“+”

因此,如果有人点击以下链接:

mydomain.com/XXX/冷啤酒/

它们被重定向到搜索查询

mydomain.com/XXX/?s=冰+啤酒

如果这是可能的,我将感谢一些解决办法


这适用于WP站点,如果这有任何区别。

这将完成第一部分:

RewriteEngine on
RewriteRule ^([^/]+)/([^/]+)/$ $1/?s=$2
至于将破折号转换为加号,我建议您在脚本中而不是在重写中这样做,这对于此类事情并不理想。它可以通过自定义脚本映射,但您也可以在现有的搜索脚本中进行映射,这是一个更好的解决方案。您可以添加一个参数“需要翻译”,以便知道哪些查询需要处理:

RewriteEngine on
RewriteRule ^([^/]+)/([^/]+)/$ $1/?s=$2&needs-translation=1

如果您真的想/需要在重写中这样做,请查看使用该选项。阅读有关性能和风险的警告。

经过7天的努力,我终于找到了答案

RedirectMatch 301 /XXX/(.*)-(.*) http://example.com/XXX/$1+$2
RedirectMatch 301 /XXX/(.*)\/ http://example.com/XXX/?s=$1
你必须在wordpress中这样做,而不是

RewriteRule ^XXX\/(.*)-(.*) XXX/$1+$2 [R=301]
RewriteRule ^XXX/(.*)\/ XXX/?s=$1 [R=301]
因为wordpress默认重写规则将覆盖上述内容,并且您不能取消默认wordpress规则,因为它将使您的所有页面和帖子无法访问

所以我的.htaccess文件看起来像

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

RedirectMatch 301 /XXX/(.*)-(.*) http://example.com/XXX/$1+$2
RedirectMatch 301 /XXX/(.*)\/ http://example.com/XXX/?s=$1
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress
重定向匹配301/XXX/(.*)-(.*)http://example.com/XXX/$1+$2
重定向匹配301/XXX/(.*)\/http://example.com/XXX/?s=$1
那么现在,, example.com/XXX/cold beer/重定向到example.com/XXX/?s=cold+beerexample.com/XXX/what-ever/重定向到example.com/XXX/?s=what+ever 等等

据我所知,你需要两条线。第一行仅转换一个“-”(最后一行)。第二行替换其余的“-”并删除wordpress重写后添加到URL末尾的“/”,当您在永久链接设置中设置了“pretty permalinks”时

缺点是,无论您使用上面的哪种方法,每次将“-”转换为“+”本身都是一个重定向,因此如果URL中有12个字符要替换,则为12个重定向。在我的情况下,这不是什么大问题,但对某些人来说可能是

我希望这能帮助其他人,因为我无法告诉你我浪费了多少时间。我不是一个以任何方式,形状或形式的开发者


如果有人有一个更好的方法,对wordpress友好,我洗耳恭听。

我的答案对你有用吗,恰克?如果使用左上角的勾号,请接受。谢谢。谢谢你的发帖。至于你发布的第一部分,它不起作用。当我把它放进我的.htaccess时,它什么也不做。在第一部分开始工作之前,我不能测试第二部分。另外,是的,我确实需要在.htaccess中执行此操作,因为我现在无法处理搜索功能。也许您需要在主配置中使用
AllowOverride all
启用.htaccess文件?不确定。但我找到了一个解决方案,并将其发布在下面。谢谢你的帮助。