htaccess int: lower重定向多次



我已经激活了RewriteMap在虚拟主机:

RewriteEngine On
RewriteMap lc int:tolower

…之后在haccess中有这样的角色:

RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule . ${lc:%{REQUEST_URI}} [R=301,L]

…但是让我重定向很多次,不要每次都得到我的REQUEST_URI重定向到/.

我不知道为什么不得到它(在我以前的托管工作很好),如果有人有一个想法,可以帮助?我会很高兴,提前谢谢你!

实际上没有什么"错误"但是,对于规则本身,我怀疑您与内部重写URL的其他指令有冲突(这可能在文件的后面发生)。当URL被重写时,REQUEST_URI服务器变量被修改,因此在后续通过重写引擎时不一定包含最初请求的URL。

为了确保规则只在初始请求上处理,而不是在重写的请求上处理,我们可以检查REDIRECT_STATUS环境变量,该环境变量在初始请求上为,并在第一次成功重写后设置为(string)200(如200 OK状态)。

例如:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule [A-Z] ${lc:%{REQUEST_URI}} [R=301,L]

您的原始条件检查REQUEST_URI是不必要的,因为相同的检查可以在RewriteRule指令本身中更有效地执行。

您还应该确保该规则位于.htaccess文件的顶部附近,在任何现有的重写之前,因为我们仍然在替换字符串中使用REQUEST_URI

你需要在测试前确保你的浏览器缓存是干净的,并且首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。

最新更新