HTACCESS - 将所有index.html重定向到/ - REGEX帮助理解

时间:2015-03-09 18:54:13

标签: regex .htaccess redirect

此规则将强制任何index.html 301重定向到/:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*index\.html[^\ ]*\ HTTP/

RewriteRule ^(([^/]+/)*)index\.html$ /$1? [R=301,L]

我正在寻求帮助,以确切了解这场比赛的作用(例如正则表达式帮助!)。

一些具体问题:

1)%{THE_REQUEST} - 为什么需要这个?

2)HTTP / - 这是为了什么?

3)index\.html[^\ ]*\ - 这意味着在index.html之后不能是\或空格,对吧?

任何输入都将非常感谢帮助我理解这个正则表达式。

1 个答案:

答案 0 :(得分:1)

1)

%{THE_REQUEST}变量是HTTP请求的第一行。它通常看起来像这样:

  • GET /some/dir/file.html HTTP/1.1
  • HEAD /images/some-image.png HTTP/1.0
  • POST /form/submit.php HTTP/1.1

这很重要,因为变量不会发生变化,而且实际上是客户端/浏览器所要求的变量,不像%{REQUEST_URI}%{QUERY_STRING}这样的变量会改变重写引擎运行的每次迭代你的规则。因此,当重写引擎处理您的规则时,您肯定知道%{THE_REQUEST}变量正是浏览器请求的变量,而不是请求或查询字符串的当前迭代是什么。

2)

HTTP/匹配请求的版本部分。实际上是一种较旧类型的HTTP请求,其中版本部分被完全删除("短" GET),但是对于大多数意图和目的,它表示请求的URI结束+任何查询字符串参数。例如:

  • GET /some/path/script.php?a=1&b=2 HTTP/1.1

HTTP/表示URI路径的结尾+参数:/some/path/script.php?a=1&b=2

3)

[^\ ]*匹配空格之外的任何内容。 \是一个用于逃避空间的转义字符。否则,mod_rewrite将假定空格意味着正则表达式的结束和任何标志的开始;最终导致错误。

正则表达式index\.html[^\ ]*特别匹配index.html以及除空格之外可能出现的所有内容。所以:

  • index.html
  • index.html?some=param&and=more
  • index.html/some/path/

将全部匹配正则表达式。正则表达式的目的是你只想匹配index.html之后的任何内容,它是请求的URI路径+ params的一部分,然后匹配URI之后的HTTP/。你不在乎它是什么,如果那里有什么东西就跟它匹配。