我继承了一个 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 与磁盘上现有目录不匹配时规则才会匹配(例如,它可以是一个文件),当然是自动匹配。