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: 要使尾部斜线可选,请在您的正则表达式模式中使用 /?$
。
我遇到一个问题,如果 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: 要使尾部斜线可选,请在您的正则表达式模式中使用 /?$
。