我已经inheritance了一个Web应用程序,并且在下面是一组.htaccess规则。 在我看来,他们什么都不做。 有人可以解释他们在做什么吗?
对我来说,它看起来像只匹配到站点根目录,检查目录是否不存在(!),然后301redirect到站点根目录。
RewriteCond %{REQUEST_URI} /$ RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)/$ $1 [L,R=301]
它将删除任何URL末尾的斜杠
例如:
https://example.com/welcome/
变为:
https://example.com/welcome
第二个RewriteCond
指定该规则只在URL与磁盘上的现有目录(例如可能是文件)不匹配时自动匹配。
只要添加到OverCoder的答案…正如已经指出的,这段代码删除URL的末尾的斜线(目录除外)…
RewriteCond %{REQUEST_URI} /$ RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)/$ $1 [L,R=301]
但是,这里的第一个RewriteCond
指令确实是多余的,可以删除。 这只是简单地检查URL是以斜杠结束的,这就是RewriteRule
模式 (即。 ^(.+)/$
)已经build立的。
第二个RewriteCond
指令确保我们不需要一个目录。 目录需要一个尾部的斜杠。 默认情况下,如果你请求一个没有的目录,mod_dir会附加一个结尾的斜杠。 所以,如果你使用mod_rewrite删除目录上的斜线,那么你可能会创build一个redirect循环。