htaccess替换查询参数中的字符

时间:2017-05-23 11:03:49

标签: apache .htaccess mod-rewrite url-rewriting

我有一个像http://www.example.com/?product=test&retailer=test&site=test

这样的网址

在这种情况下(产品参数存在)我删除& site = test但保持其余的url不变。

如果产品参数不存在,例如http://www.example.com/?retailer=test&site=test

我删除了& site = test并将?retailer = test更改为/ retailer / test,因此完整的网址将为http://www.example.com/retailer/test。我也只是在根域发生这种情况。

我使用这些规则

# first condition
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{QUERY_STRING} ^product=([^&\s]+)&retailer=([^&\s]+)&site=test$ [NC]
RewriteRule ^$ /?product=%1&retailer=%2 [R=301,L]

# second condition
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{QUERY_STRING} ^retailer=([^&\s]+)&site=test$ [NC]
RewriteRule ^$ /retailer/%1? [R=301,L]

关于第二条规则当url被重写为/ reatiler / test时,有可能在这个实例中进行/ retailer / test + test我需要将其更改为/ retailer / test-test也可以/零售商/测试+测试+测试需要/零售商/测试测试

对此的帮助将非常感激

1 个答案:

答案 0 :(得分:1)

您可以使用ftp.exe标记(更多信息here):

N

请注意,这实际上是等效的,因为此处涉及重定向:

RewriteRule ^retailer/(.*)\+(.*)$ /retailer/$1-$2 [N,R=301]

所以最后你的htaccess看起来应该是这样的

RewriteRule ^retailer/(.*)\+(.*)$ /retailer/$1-$2 [R=301,L]