具有多个{QUERY_STRING}的.htaccess重写规则

时间:2015-09-15 09:02:24

标签: regex apache .htaccess mod-rewrite

我正在开展一个网站项目,我们基本上从TYPO3转移到WordPress& Magento的溶液。

在启动新网站之前,我想添加重写规则,将旧的(TYPO3,非SEF)网址指向相应的新网址。我有一个包含大约1000个URL的Excel列表,我想以某种方式添加到htaccess并创建301' s。 如果你有更好的方法,我要感恩。

我正在努力的是:<​​/ p>

&#34; old&#34;网址结构类似于?id=123\&user_e15proddb1_pi1[domain]=42

相应的新网址将是 /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}分成两部分
RewriteCond %{QUERY_STRING} ^id=123$
RewriteCond %{QUERY_STRING} ^user_e15proddb1_pi1[domain]=42$

其次是TheRule。也没有用。

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

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

但这只能在开头没有问号的情况下起作用。

你能否暗示我做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以通过转发[]

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

另请注意目标URI末尾的?,以删除任何现有的查询字符串,以防止重定向循环。

答案 1 :(得分:0)

我得到了一个解决方案,并让这个工作:

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

当我一遍又一遍地尝试时,逃避这些角色的东西很可能出错了。