htaccess - 重定向不起作用或产生冲突

htaccess - Redirects don't work or produce conflicts

我遇到一个问题,如果 URL 末尾没有 /,某些重定向将无法工作。此外,有时我的重定向冲突会重写以下重定向。

全球规则

Options -MultiViews
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/\.php -f
RewriteRule ^(.+?)/?$ .php [L]
ErrorDocument 404 /404.php

没有斜杠无效

RewriteRule ^(.*)launch/$ /products/ [R=301,L]
RewriteRule ^(.*)solutions/$ /products/ [R=301,L]

示例: 当我搜索 /launch 而没有最后一个 / 时,我最终会到达我的 404 页面。

第二个和第三个冲突

RewriteRule ^(.*)products/overview/heartbeat/$ /products/heartbeat/ [R=301,L]
RewriteRule ^(.*)heartbeat/$ /products/heartbeat/ [R=301,L]
RewriteRule ^(.*)heartbeat-beta/$ /products/heartbeat-beta/ [R=301,L]

示例: 当我搜索 /heartbeat-beta/ 并期望得到 /products/heartbeat-beta/ 时,我的结果是: /products/products/products/products/products/products/products/products/products/products/products/products/products/products/products/products/heartbeat-beta/

您的重写规则顺序不正确,有一些可疑的正则表达式模式。按此顺序排列:

RewriteRule ^(heartbeat(?:-beta)?)/?$ /products// [R=301,L,NC]

RewriteRule ^products/overview/(heartbeat)/?$ /products// [R=301,L,NC]

PS: 要使尾部斜线可选,请在您的正则表达式模式中使用 /?$