我是一位长期读者,但这是我的第一篇文章。通常我可以谷歌和问题解决我遇到的任何问题,但这一个花了我很多时间,我不知所措。
从好的方面来说,我学到了很多关于.htaccess代码的构成,而不是我多年来一直在做的切割和粘贴。
手头的问题是我正在从一个旧的CMS系统转移到一个新系统。旧系统以十六进制格式在网址中显示[&]&符号字符,'%26'。新的CMS系统完全剥离了这一点。我一直试图通过重写规则删除它。
The objective is to make this url:
http://domain.com.au/drums-%26-percussion/
Redirect to this:
http://domain.com.au/drums-percussion/
我尝试了很多行和组合,但是这两个例子是我能够接近它的最接近的工作。
Example A)
RewriteRule ^(.*)\%26(.*)$ http://domain.com.au/$1-$2 [L,NE,N,R=301]
如果我实际使用&而不是十六进制格式%26,则上面的示例有效。由于某种原因我不知道,我无法解雇它。没有任何反应。在%26周围,我已经厌倦了很多变化。
Example B)
RewriteCond %{THE_REQUEST} ^(.*)(-%26-)(.*) [NC]
RewriteRule ^ http://domain.com.au/$1-$2 [L,NE,R=302]
我在某处读到%26必须被置于一个被拾取的状态。所以我尝试了这个。它读取%26并触发重定向。问题是我没有传递$ 1 $ 2的值。我得到这个代码的最终结果是:
Start:
http://domain.com.au/drums-%26-percussion/
Redirect:
http://derringers.testpad.com.au/-
我很感激所有建议就是这件事。谢谢。
答案 0 :(得分:1)
正如documentation所述:
在第一个
RewriteRule
上,它与请求的(%-decoded)URL路径匹配。
这意味着您在浏览器中看到的网址为:
http://domain.com.au/drums-%26-percussion/
实际上是。
http://domain.com.au/drums-&-percussion/
并且RewriteRule
尝试匹配/drums-&-percussion
鉴于此,匹配URL的正确RewriteRule
为:
RewriteRule ^(.*)-&-(.*)$ http://domain.com.au/$1-$2 [L,NE,N,R=301]