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

use*_*060 9 .htaccess mod-rewrite

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

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

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

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

Apo*_*ica 12

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

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

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

如果您有嵌套括号,比如(([a-z]+)-[a-z]+),$1总是以最捕获(在这种情况下,整个正则表达式),$2是第一个嵌套组,依此类推.

  • 作为一个小问题,由于没有"R"标志,这不会真正"重定向"到该页面; 重写将完全在内部发生.更准确地说,导航到`hello-there.html`的用户将被**hello-there.php`服务; 他们无法知道发生了什么. (2认同)

IMS*_*SoP 5

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

指令RewriteRule由3 部分组成:

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

在本例中,您有一个正则表达式,它匹配.html仅由字母a-z、数字0-9和组成/的任何以 结尾的内容-。然而,它还包含一组括号(...),它们标记要“捕获”的模式的一部分。

然后替换字符串可以引用这个“捕获的”值;第一个捕获是$1,第二个捕获是$2,依此类推。

在这种情况下,捕获的部分是 之前的所有内容.html,并且替换是$1.php,这意味着保留之前的任何字符串.html,但.html被丢弃并.php粘在上面。

因此,对于您的具体示例,访问home.html将像您请求的那样进行home.php。