我在谷歌有数百个(如果不是数千个)具有产品名称的网址。我的新电子商务现在在构造URL时用连字符替换空格,我需要使用.htaccess通过用连字符替换空格来自动将旧URL重定向到新的URL。
我使用的示例网址是
detalle.php?titulo=Zapatillas%20Salomon%20Xr%20Mission&codigo=040-8800-072
但要替换的空格数量可能差异很大。
我尝试过的最后一次规则是:
RewriteCond %{QUERY_STRING} ^(.*)[\s|%20](.*)&codigo=(.*)
RewriteRule detalle.php detalle.php?%1-%2&codigo=%3 [N=20]
在网上找到的测试人员中,这只替换了最后一个空格,让其他人没有改变,在我的开发服务器中甚至没有。
我已经花了将近一天的时间,而且无处可去,即使根据Apache文档,这应该有效。
提前致谢。
编辑:
@anubhava给出的解决方案
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.*?)(?:\+|%20|\s)+(.+?)\sHTTP [NC]
RewriteRule ^ /%1-%2 [L,NE,R=302]
按照要求工作,但不知何故打破了以前一直工作完美的.htacces中的线条(减去空白)
RewriteCond %{QUERY_STRING} ^titulo=(.*)&codigo=(.*)$
RewriteRule detalle.php http://otherdomain/%1--det--%2? [R=301,L]
这是将带参数的URL转换为"友好"网址。
EDIT2:
开发服务器中存在某种问题,因为它位于子目录中,我在生产服务器上尝试过,一切正常,所以我接受了答案。
我把这个编辑放在其他人有类似情况的情况下。
答案 0 :(得分:1)
您可以在根.htaccess中将此规则用作第一个规则,以便通过连字符转换所有空格。
RewriteEngine In
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.*?)(?:\+|%20|\s)+(.+?)\sHTTP [NC]
RewriteRule ^ /%1-%2 [L,NE,R=302]