【问题标题】:I Can't Get This RedirectMatch 301 To Work我无法让这个 RedirectMatch 301 工作
【发布时间】:2014-06-18 22:47:23
【问题描述】:

我想重定向调用脚本的所有页面以调用不同的脚本并更改参数的名称。我也想从 url 中丢失一个文件夹。无论我尝试什么,都会出错。

为了在我们在新网站上线之前进行测试,这些页面将被重定向,我们设置了一个指向新文件位置的域,并且作为重定向的一部分也需要更改它(在我们去之后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 一起使用

请对我做错了什么有任何想法,或者这是不可能的。

另外,当您进行重定向时,它是否会更改 url,以便您可以使用后续重定向来进一步修改它?在这种情况下,我可能可以使用 2 或 3 个重定向,但我确信这必须在一个中实现,只是我有时会在正则表达式方面遇到困难。

【问题讨论】:

  • 在获得临时 302 的有效解决方案之前,请勿使用 301 永久重定向,否则每次更改后都必须重新启动浏览器...

标签: regex apache httpd.conf url-redirection


【解决方案1】:

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

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

并替换为:

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

Demo

【讨论】:

  • 我只希望它在 url 匹配“b2citmdsp”的情况下工作。非常感谢演示和 regex101.com 的链接,这应该可以帮助我弄清楚如何做到这一点(希望如此)。
  • @TonyPayne,我已经更新了我的答案。它现在可以按您的意愿工作。
  • 谢谢。我也在玩这个,并想出了一个非常相似的解决方案(从选择中省略 .pgm)。我会在几个小时内尝试这个(午餐时间我可以重新启动 Apache)。它已经困扰我好几个星期了。
  • @TonyPayne,祝你好运。 :)
  • 仍然无法正常工作,但可能是 ScriptAliasMatch - 请参阅下面的回复。
【解决方案2】:

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

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

但是,我有另一个重定向,它只需要更改程序的名称就可以正常工作。

因此,我将问题重定向更改为仅更改程序的名称,这意味着它使用参数的旧名称调用它。然后我改变了程序,让它做的第一件事就是检查是否传递了旧参数,并自己重定向以使用正确的参数。

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

感谢大家的帮助。只是表明,有时您不需要为月球射击并获得完美的答案,只要您找到可行且似乎运行良好的解决方案就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 2011-12-03
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多