我无法使此RedirectMatch 301正常工作

时间:2014-05-02 09:32:54

标签: regex apache httpd.conf url-redirection

我想重定向调用脚本的所有页面来调用不同的脚本,并且还要更改参数的名称。我还想丢失网址中的文件夹。无论我尝试什么,我都会收到错误。

为了测试目的,我们在新网站上进行测试,这些页面将被重定向,我们有一个域设置指向新的文件位置,并且需要更改它作为重定向的一部分(在我们去之后) live旧域将指向新的域位置。

因为url调用了一个程序(prodpage.pgm)并且还需要Srcipt别名,所以这个重定向必须在httpd.conf文件中完成,而不是在.htaccess中,这意味着我必须在每次更改任何内容时重启Apache,所以我不能

我们要重定向的旧网址格式为:

 http://www.olddomain.com/b2c/b2citmdsp.pgm?pp_skmno=18297

应该重定向到:

 http://www.newdomain.com/prodpage.pgm?item=18297

我使用301重定向来执行此操作,但它不起作用:

RedirectMatch 301 ^/b2citmdsp.pgm\?pp_skmno=(.*) http://www.newdomain.com/prodpage.pgm?item=$1

总之,我需要:

(a)输掉/ b2c / (b)将b2citmdsp.pgm更改为prodpage.pgm (c)检索pp_skmno的参数值并将其与新URL一起使用

关于我做错了什么想法,或者这是不可能的。

此外,当您进行重定向时,是否更改了网址,以便您可以使用后续重定向进一步修改它?在这种情况下,我可能可以使用2或3个重定向,但我确信这一定必须是可能的,它只是我有时会与正则表达式斗争。

2 个答案:

答案 0 :(得分:1)

您可以匹配以下正则表达式:

http:\/\/.+\/b2citmdsp\.pgm[^=]+=(.*)

并替换为:

http://www.newdomain.com/prodpage.pgm?item=\1

Demo

答案 1 :(得分:0)

我最终解决了这个问题,但不幸的是它并没有纯粹使用Apache重定向。

我想更改程序的名称以及参数的名称,但无论我尝试使用什么样的正则表达式,都会一直出现脚本错误。

但是,我有另一个重定向,只需更改程序的名称,并且工作正常。

所以,我改变了我的问题重定向只是改变了程序的名称,这意味着它用参数的旧名称来调用它。然后我更改了程序,以便它首先检查旧参数是否已经通过,并且它自己重定向以使用正确的参数。

这可能有点笨拙,但它有效,问题解决了,对访问者来说几乎是即时和透明的。

感谢大家的帮助。只是表明有时你不需要为月亮拍摄并得到完美的答案,只要你找到一个有效的解决方案并且看起来效果很好就足够了。