我试图理解.htaccess文件中这一行的含义
RewriteRule ([a-z0-9/-]+).html $1.php [NC,L,QSA]
$ 1.php基本上是什么?服务器中的文件
如果我们有home.html将重定向到哪里? home.php?
答案 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个部分:
在这种情况下,您有一个正则表达式,其匹配以.html
结尾的任何内容,其中只包含字母a-z
,数字0-9
,/
和{{1} }。但是,它还包含一组括号-
,用于标记要“捕获”的模式的一部分。
然后,Substitution字符串可以引用此“捕获”值;第一次捕获是(...)
,第二次捕获是$1
,依此类推。
在这种情况下,捕获的部分是$2
之前的所有内容,并且替换为.html
,这意味着保留$1.php
之前的任何字符串,但是.html
被扔掉了而.html
被卡住了。
因此,对于您的具体示例,访问.php
的行为就像您已请求home.html
一样。