我想any-url
任何URL路径都像foo
或foo/bar/baz/something
, 但不是什么都没有。
请尝试以下操作:
# Redirect "/customers/em/customers/any-url" to "/customers/any-url"
RewriteRule ^(customers)/em/customers/(.+) /$1/$2 [R=301,L]
The
$1
backreference包含;“客户”;(保存重复)从
RewriteRule
图案。以及
$2
backreference包含
any-url
部分请求中可能存在的任何查询字符串都会原封不动地传递。
关于URL/any-url/map/?str=Av+street+Fight,+19&cit=Alabama&sta=San+Paolo
, 您实际上并没有说明查询字符串是文本还是变量-我假设查询字符串是文本,并且必须与所写内容完全匹配。在这种情况下,您需要执行以下操作:
# Redirect "/any-url/map/?str=<value>" to "/customers/any-url"
RewriteCond %{QUERY_STRING} =str=Av+street+Fight,+19&cit=Alabama&sta=San+Paolo
RewriteRule ^(.+)/map/$ /customers/$1 [QSD,R=301,L]
The
=
CondPattern上的前缀运算符
RewriteCond
指令)使其成为字典式字符串比较(而不是正则表达式),因此字符串按字面匹配。
这个QSD
上的标志RewriteRule
指令是丢弃初始请求中的查询字符串所必需的。
但是,如果str
URL参数应接受任何非空值,然后将上述CondPattern更改为:^str=.
.
这些重定向需要转到的顶部.htaccess
文件,在现有指令(WordPress前端控制器)之前,否则它们可能无法处理。
您还应该首先使用302(临时)重定向进行测试,并且只有在完全测试它们是否按预期工作后,才可以更改为301(永久)重定向。浏览器会持久缓存301s,因此可能会导致测试出现问题。
确保在测试之前清除浏览器缓存。
参考号: