用 .htaccess 替换查询字符串中的空格
Replacing whitespaces in querystring with .htaccess
我有成百上千个 URL 里面有产品名称的 Google。我的新电子商务现在在构造 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]
这是将带参数的URLs转化为"friendly"URLs.
编辑2:
开发服务器中存在某种问题,因为它位于子目录中,我在生产服务器上尝试过,一切正常,所以我接受了答案。
我进行此编辑以防其他人遇到类似情况。
您可以将此规则用作根 .htaccess 中的第一条规则,以通过连字符转换所有空格。
RewriteEngine In
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.*?)(?:\+|%20|\s)+(.+?)\sHTTP [NC]
RewriteRule ^ /%1-%2 [L,NE,R=302]
我有成百上千个 URL 里面有产品名称的 Google。我的新电子商务现在在构造 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]
这是将带参数的URLs转化为"friendly"URLs.
编辑2:
开发服务器中存在某种问题,因为它位于子目录中,我在生产服务器上尝试过,一切正常,所以我接受了答案。
我进行此编辑以防其他人遇到类似情况。
您可以将此规则用作根 .htaccess 中的第一条规则,以通过连字符转换所有空格。
RewriteEngine In
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.*?)(?:\+|%20|\s)+(.+?)\sHTTP [NC]
RewriteRule ^ /%1-%2 [L,NE,R=302]