【问题标题】:.htaccess rewrite rule with multiple {QUERY_STRING}s具有多个 {QUERY_STRING} 的 .htaccess 重写规则
【发布时间】:2015-09-15 09:02:23
【问题描述】:

我正在做一个网站项目,我们基本上从 TYPO3 转移到 WordPress 和 Magento 解决方案。

在启动新站点之前,我想添加重写规则以将旧(TYPO3,非 SEF)URL 指向相应的新 URL。我有一个 Excel 列表,其中包含大约 1000 个 URL,我想以某种方式添加到 htaccess 并创建 301。 如果您对此有更好的方法,我将不胜感激。

我正在努力解决的是:

“旧”网址结构类似于?id=123\&user_e15proddb1_pi1[domain]=42

相应的新 URL 将是 /de/alle-produkte/neuheiten.html

RewriteEngine 开启,RewriteBase 为 /。

我试过了

RewriteCond %{QUERY_STRING} ^id=123\&user_e15proddb1_pi1[domain]=42$
RewriteRule . /de/alle-produkte/neuheiten.html [R=301,L]

另外转义_[]无济于事。 我试图通过

{QUERY_STRING}s 分成两部分
RewriteCond %{QUERY_STRING} ^id=123$
RewriteCond %{QUERY_STRING} ^user_e15proddb1_pi1[domain]=42$

遵循规则。也无济于事。

重写本身有效,因为我尝试过

RewriteRule .id=123\&user_e15proddb1_pi1\[domain\]=42$ /de/alle-produkte/neuheiten.html [R=301,L]

但这只有在开头没有问号的情况下才有效。

你能告诉我我做错了什么吗?

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    您可以通过转义[] 来使用此规则:

    RewriteCond %{QUERY_STRING} ^id=123&user_e15proddb1_pi1\[domain\]=42$
    RewriteRule ^ /de/alle-produkte/neuheiten.html? [R=302,L]
    

    还要注意目标 URI 末尾的 ? 以剥离任何现有的查询字符串以防止重定向循环。

    【讨论】:

    • 我认为点 (.) 作为要重写的 URL 的选择器在某种程度上是错误的。您的解决方案效果很好,非常感谢!
    • 是的,模式中的点将不会匹配着陆页,因为使用^$ 会匹配。使用^匹配所有情况会更安全。
    【解决方案2】:

    我找到了一个解决方案并成功解决了这个问题:

    RewriteCond %{QUERY_STRING} ^id=123\&user\_e15proddb1\_pi1\[domain\]=42$
    RewriteRule (.*) /de/alle-produkte/neuheiten.html? [R=301,L]
    

    当我一遍又一遍地尝试时,转义这些字符可能会出错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-14
      • 1970-01-01
      • 2015-02-15
      • 2017-11-21
      • 2013-06-29
      • 1970-01-01
      • 2011-08-14
      相关资源
      最近更新 更多