Apache RewriteRule在问号上失败

时间:2015-06-24 21:05:35

标签: apache .htaccess rewrite

我们在创建网址时遇到了拼写错误,所以

/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$1 [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开头的网址都被重定向到同一产品。所以我尝试了这个

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,或者尽管重写条件正确,它仍无法正常工作。

1 个答案:

答案 0 :(得分:1)

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

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

编辑:

然后尝试匹配该网址唯一的部分内容。

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