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]
我们在创建 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]