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

时间:2017-01-27 20:57:06

标签: redirect mod-rewrite replace character wildcard

我需要使用.htaccess文件从文件夹中进行通配符301重定向以查询并替换字符。

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

示例...

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

重定向到

mydomain.com/XXX/的?S =所有子文件夹+

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

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

mydomain.com/XXX/的冷啤酒 /

他们被重定向到搜索查询

mydomain.com/XXX/的?S =冷+啤酒

如果可以的话,我会很感激一些解决方案。

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

2 个答案:

答案 0 :(得分:0)

这将完成第一部分:

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

至于将破折号转换为加号,我建议你在脚本中而不是在重写中这样做,这对于这些事情并不理想。它可以通过自定义脚本映射它,但您也可以在现有搜索脚本中执行此操作,这是一个更好的解决方案。您可以添加参数" needs-translation"所以你知道哪些查询需要处理:

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

如果您真的想要/需要在重写中执行此操作,请使用RewriteMap选项查看prg。阅读有关绩效和风险的警告。

答案 1 :(得分:0)

在拔掉头发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

现在, example.com/XXX/cold-beer / 重定向到 example.com/XXX/?s=cold+beer example.com/XXX/what-ever / 重定向到 example.com/XXX/?s=what+ever 等等。

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

无论您使用哪种方法,无论您使用上述哪种方法,每次将“ - ”转换为“+”都是自身的重定向,因此如果您要在网址中替换12个字符,这是12次重定向。在我的情况下,这不是一个大问题,但可能是某些人。

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

如果某人有一个更好的方式,那就是wordpress友好,我全都耳朵。