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}/$1'.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
ErrorDocument 404 /404.php

没有斜杠就不起作用

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

例:当我在没有最后一个/的情况下搜索/launch时,我最终会进入我的 404 页面。

第二和第三的冲突

RewriteRule ^(.*)products/overview/heartbeat/$ /$1products/heartbeat/ [R=301,L]
RewriteRule ^(.*)heartbeat/$ /$1products/heartbeat/ [R=301,L]
RewriteRule ^(.*)heartbeat-beta/$ /$1products/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/$1/ [R=301,L,NC]
RewriteRule ^products/overview/(heartbeat)/?$ /products/$1/ [R=301,L,NC]

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