.htaccess文件中的$ 1是什么意思?

时间:2014-07-23 22:25:02

标签: .htaccess mod-rewrite

我试图理解.htaccess文件中这一行的含义

 RewriteRule ([a-z0-9/-]+).html $1.php [NC,L,QSA]

$ 1.php基本上是什么?服务器中的文件

如果我们有home.html将重定向到哪里? home.php?

4 个答案:

答案 0 :(得分:12)

$1是您正则表达式中第一个被捕获的组;也就是说,()之间的内容。如果你的正则表达式中有第二组括号,$2将包含那些parens的内容。这是一个例子:

RewriteRule ([a-z0-9/-]+)-([a-z]+).html$ $1-$2.php [NC,L,QSA]

假设用户导航到hello-there.html。他们将被送达hello-there.php。在您的替换字符串中,$1包含第一组parens(hello)的内容,而$2包含第二组(there)的内容。替换字符串中总会有与“正则表达式”中有一组捕获括号一样多的“美元”值。

如果你有嵌套的parens,比如(([a-z]+)-[a-z]+)$1总是引用最外面的捕获(在这种情况下是整个正则表达式),$2是第一个嵌套集,依此类推。

答案 1 :(得分:2)

它是对模式([a-z0-9/-]+).html$中括号表示的第一个捕获组的引用。如果有两个(.*)-(.*),那么您将访问第一个捕获组$1和第二个捕获组$2等等。

答案 2 :(得分:2)

$1是指你的正则表达式(即括号之间)第一个被抓住的群体。在您的情况下,它指的是:

([a-z0-9/-]+)

对于网址mypage.html$1将包含“mypage”,规则将重定向到mypage.php

答案 3 :(得分:2)

.htaccess文件可以包含各种各样的Apache配置指令,但是这个指令与许多人一样,与URL重写模块mod_rewrite有关。

RewriteRule directive有3个部分:

  • 需要与当前网址匹配的模式(正则表达式)
  • 替换字符串,代表要提供的URL,或指示浏览器重定向到
  • 一组可选的标志

在这种情况下,您有一个正则表达式,其匹配以.html结尾的任何内容,其中只包含字母a-z,数字0-9/和{{1} }。但是,它还包含一组括号-,用于标记要“捕获”的模式的一部分。

然后,Substitution字符串可以引用此“捕获”值;第一次捕获是(...),第二次捕获是$1,依此类推。

在这种情况下,捕获的部分是$2之前的所有内容,并且替换为.html,这意味着保留$1.php之前的任何字符串,但是.html被扔掉了而.html被卡住了。

因此,对于您的具体示例,访问.php的行为就像您已请求home.html一样。