【问题标题】:htaccess int:tolower redirected many timeshtaccess int:tolower 多次重定向
【发布时间】:2021-09-16 07:04:20
【问题描述】:

我已经在 Virtualhost 中激活了 RewriteMap:

RewriteEngine On
RewriteMap lc int:tolower

... 之后在 htacess 中扮演这个角色:

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

...但是让我被重定向很多次,并且每次都不会得到我的 REQUEST_URI 将我重定向到 /。

如果有人有想法并且可以提供帮助,我不知道为什么不明白(在我的旧主机上工作正常)?我会很高兴并提前感谢您!

【问题讨论】:

    标签: .htaccess mod-rewrite tolower


    【解决方案1】:

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

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

    例如:

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

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

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

    您需要在测试之前确保您的浏览器缓存已清除,并首先使用 302(临时)重定向进行测试以避免潜在的缓存问题。

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      相关资源
      最近更新 更多