.htaccess - 剥离角色'%26'来自网址

时间:2015-05-29 01:29:47

标签: .htaccess mod-rewrite redirect

我是一位长期读者,但这是我的第一篇文章。通常我可以谷歌和问题解决我遇到的任何问题,但这一个花了我很多时间,我不知所措。

从好的方面来说,我学到了很多关于.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/-  

我很感激所有建议就是这件事。谢谢。

1 个答案:

答案 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]