不确定这组 .htaccess 规则在做什么

不确定这组 .htaccess 规则在做什么

我继承了一个 Web 应用程序,其中有以下一组 .htaccess 规则。在我看来,它们什么都没做。有人能解释一下它们在做什么吗?

对我来说,它们似乎仅匹配站点根目录,检查目录是否不存在(!),然后 301 重定向到站点根目录。

RewriteCond %{REQUEST_URI} /$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]

答案1

只是为了补充 OverCoder 的答案...正如已经指出的,此代码删除了 URL 末尾的斜杠(目录除外)...

RewriteCond %{REQUEST_URI} /$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]

但是,此处的第一个RewriteCond指令确实是多余的,可以删除。这只是检查 URL 是否以斜杠结尾,这就是RewriteRule 图案(即^(.+)/$)已经建立。

第二RewriteCond条指令确保我们请求的不是目录。目录需要尾部斜杠。默认情况下,mod_dir 将附加如果您请求的目录没有斜杠,则末尾会有一个斜杠。因此,如果您随后使用 mod_rewrite 删除了目录中的末尾斜杠,则可能会创建重定向循环。

答案2

它会删除任何 URL 末尾的斜线

例如:

https://example.com/welcome/

变成:

https://example.com/welcome

第二条RewriteCond指定仅当 URL 与磁盘上现有目录不匹配时规则才会匹配(例如,它可以是一个文件),当然是自动匹配。

相关内容