我在 stackoverflow 或 google 上找不到任何有关其含义的信息=$1
。我得到的信息很肤浅,但对于像我这样的初学者来说却一无所获。它有什么作用?
如果我有这样的事情:
www.website.com/profile.php?simon
西蒙这个名字对应吗$1
变量和why 1?
我是这样理解的:
-
(.*) profile/profile.php?
id=$1
粗体对应的是:
-
www.website.com/profile.php?
id=simon
通过重写转换后变为:
www.website.com/profile/simon
我在这里错过了什么吗?
Edit:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_FILENAME}.php -d
RewriteRule ^(.*)$ /profile/index.php?id=$1
这会改变吗
本地主机/test/index.php?philip
到:
本地主机/测试/配置文件/菲利普
我尝试输入网址,但失败了。我理解正则表达式的作用,但不知怎的,我完全混淆了替换的工作原理。
反向引用:
RewriteRule ^.*$ /?id=$1
$1将是空白的
RewriteRule ^(.*)$ /?id=$1
$1会是什么.*
matched
RewriteRule ^(a|b|c)/(d|e|f)$ /?id=$1-$2
$1可能是“a”、“b”或“c”,具体取决于哪个匹配,并且$2可能是“d”、“e”或“f”,具体取决于哪一个匹配。
See: http://httpd.apache.org/docs/trunk/rewrite/intro.html#regex
这里必须记住一件重要的事情:每当你在Pattern或在其中之一条件模式,反向引用是内部创建的,可以与字符串一起使用$N
and %N
(见下文)。这些可用于创建代换的参数RewriteRule
or the 测试串的参数RewriteCond
.
捕获在RewriteRule
模式(违反直觉)可用于所有前面的RewriteCond
指令,因为RewriteRule
表达式在各个条件之前计算。
图 1 显示了反向引用被传输到哪些位置以进行扩展,并说明了RewriteRule
, RewriteCond
匹配。在接下来的章节中,我们将探索如何使用这些反向引用,所以如果您一开始觉得它有点陌生,请不要担心。
这会改变吗
localhost/test/index.php?philip
to: localhost/test/profile/philip
不,它改变了localhost/test/profile/philip
to localhost/profile/index.php?id=philip
。假设该规则位于“profile”目录中的 htaccess 文件中,则:
- 浏览器输入或单击链接:
localhost/test/profile/philip
- 请求发送到本地主机:
/test/profile/philip
- 该请求通过 apache 的处理管道,并对其应用 mod_rewrite,并且该请求被截断为
philip
- 假如说
philip
既不是目录也不是文件,规则匹配(.*)
到它,和字符串philip
被捕获
- 那么规则rewrites请求
/profile/index.php?id=philip
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)