Apache RewriteRule 因问号而失败

Apache RewriteRule fails on question mark

我们在创建 URL 时出现了拼写错误,因此

/wasserh?hne/wasserhahn-1-2-zoll-dg11040-e+1281

应该重定向到

/wasserhaehne/wasserhahn-1-2-zoll-dg11040-e+1281

.htaccess 以

开头
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.kull-design.com [R,L=301]

RewriteCond   %{REQUEST_FILENAME}   !-d
RewriteCond   %{REQUEST_FILENAME}   !-f
RewriteRule   (.*) index.php [L]
RewriteRule  ^eng/deu index.php

通常这样的东西是有效的

Redirect 301 /blog/tag/wasserhaehne-aus-messing/ https://www.kull-design.com/wasserhahn-classic/wasserhahn-13cm-40-593+631

但这失败了

RewriteRule /wasserh?hne/wasserhahn-1-2-zoll-dg11040-e+1281 https://www.kull-design.com/wasserhaehne/wasserhahn-1-2-zoll-dg11040-e+1281

我试图转义 ?,但这无济于事。我怀疑是在 ?被视为查询字符串,所以我尝试了

RewriteCond %{QUERY_STRING} hne/wasserhahn-1-2-zoll-kurz-dg11040m+1277
RewriteRule ^/wasserh https://www.kull-design.com/wasserhaehne/wasserhahn-1-2-zoll-kurz-dg11040m+1277 [R=301,L]

但这并不能解决问题。有类似的问题,但它们处理的是真实的查询字符串。

更新:

我使用 htaccess.madewithlove.be 测试了 PanamaJacks 解决方案。似乎任何以 wasserh 开头的 url 都被重定向到同一产品。所以我改用这个

https://www.kull-design.com/wasserh?hne/wasserhahn-gebogen-dg110h76870+1295

RewriteEngine On
RewriteCond %{QUERY_STRING} ^hne/wasserhahn-gebogen-dg11010+1295
RewriteRule ^wasserh(.*)$ https://www.kull-design.com/wasserhaehne/wasserhahn-gebogen-dg11010+1295 [R=301,L]

但不符合条件。再次转义 - 或 + 无效。

更新: 请注意,您必须将这些重定向放在 RewriteRule 之前,它将任何内容发送到 index.php,否则尽管重写条件正确,它也不会工作。

实际上这应该有点用。试试这个规则,看看它是否适合你。

RewriteEngine On
RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^wasserh(.*)$ https://www.kull-design.com/wasserhaehne/wasserhahn-1-2-zoll-kurz-dg11040m+1277? [R=301,L]

编辑:

然后尝试匹配其中唯一的部分 URL。

RewriteCond %{QUERY_STRING} ^hne(.+)1281$
RewriteRule ^wasserh(.*)$ https://www.kull-design.com/wasserhaehne/wasserhahn-1-2-zoll-kurz-dg11040m+1277? [R=301,L]