我在这里需要一点帮助。我将此重定向用于特定的 URL 以删除 .PHP 扩展名并且它有效,但在每个重定向的 URL 的末尾添加了尾部 slush。我如何仅从此规则中的重定向 URL 中删除尾随的 slush:
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(about|contact)(\.php)?$ /$1/ [R=302,L]
RewriteRule ^(about|contact)/$ $1.php [END,QSA,NC]
谢谢!!
我尝试添加此规则 RewriteRule (.*)/$ $1 [R=301,L] 另外,但我在那些相同的页面上出错。
RewriteRule ^(about|contact)(\.php)?$ /$1/ [R=302,L] -----------------------------------------^
因为您要在此处附加尾部斜杠 ^
RewriteRule ^(about|contact)/$ $1.php [END,QSA,NC] ----------------------------^
但是,您也 expecting 以下规则(上文)中的尾部斜线。所以你不能简单地删除第一条规则中的尾部斜杠而不修改第二条规则。
这些规则的重点是强制执行尾部斜杠。为避免尾部斜杠,您需要将这两个规则(而不是添加其他规则)更改为以下内容:
RewriteEngine On
RewriteRule ^(about|contact)\.php$ /$1 [R=302,L]
RewriteRule ^(about|contact)$ $1.php [END]
如果您在第二条(重写)规则上使用
END
标志,则不需要第一条检查 RewriteCond
env var 的规则上的 REDIRECT_STATUS
指令。
由于您不再附加尾部斜杠,因此第一条规则的
.php
扩展应该 not 是可选的(就像您原来的那样)。否则,你会得到一个重定向循环。
您应该避免在第二条规则上使用
NC
标志,因为这会促进 重复内容(但无论如何您都不会在第一条规则上使用它)。这条规则上的QSA
标志不是必需的。
这里不需要
RewriteBase
指令,应该省略。
澄清一下,您应该在内部链接中链接到
/about
和 /contact
(没有 .php
扩展名)。