Php 在url重写中,=$1意味着什么?

Php 在url重写中,=$1意味着什么?,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我在stackoverflow或google上找不到任何关于=$1含义的信息。我得到的只是一些肤浅的信息,但对像我这样的初学者来说却一无所获。它有什么作用 如果我有这样的东西: www.website.com/profile.php?simon simon的名称是否对应于$1变量以及为什么为1 我是这样理解的: (*)profile/profile.php?id=$1 粗体对应于: www.website.com/profile.php?id=simon 使用“重写”将其转换为: w

我在stackoverflow或google上找不到任何关于
=$1
含义的信息。我得到的只是一些肤浅的信息,但对像我这样的初学者来说却一无所获。它有什么作用

如果我有这样的东西:

www.website.com/profile.php?simon
simon的名称是否对应于
$1
变量以及为什么为1

我是这样理解的:

  • (*)profile/profile.php?
    id=$1
粗体对应于:

  • www.website.com/profile.php?
    id=simon
使用“重写”将其转换为:

  • www.website.com/profile/simon
我是不是遗漏了什么

编辑:

这会改变吗

localhost/test/index.php?philip 致: localhost/test/profile/philip


我试图输入url,但失败了。我理解regex的功能,但不知何故,我完全搞不清楚替换的工作原理。

让我试着用外行的术语解释一下

假设你通常会链接到这样一个页面

/listing.php?id=2146_east_fifth_street

然后你创建一个像这样的重写规则

RewriteRule^([A-Za-z0-9_-]+)$listing.php?id=$1[NC,L]

这部分
^([A-Za-z0-9_-]+)$
表示接受任何带有大写字母/小写字母/0-9/下划线/连字符的查询字符串参数

这部分
listing.php?id=$1
说明将向浏览器提供什么页面。
$1
请求第一个querystring参数,并将其附加到URL,如下所示。。。your-domain.com/2146_east_fifth_street

这是您在URL栏中看到的,而不是。。。your domain.com/listing.php?id=2146_east_fifth_street

编辑

重写规则的第二部分是“真实”页面所在的位置

如果你想让你的url读/profile/philip

您的重写规则将以/profile/开头,如下所示


RewriteRule^profile/(.*)$path/to/the/real/file/index.php?id=$1

让我试着用外行的术语解释一下

假设你通常会链接到这样一个页面

/listing.php?id=2146_east_fifth_street

然后你创建一个像这样的重写规则

RewriteRule^([A-Za-z0-9_-]+)$listing.php?id=$1[NC,L]

这部分
^([A-Za-z0-9_-]+)$
表示接受任何带有大写字母/小写字母/0-9/下划线/连字符的查询字符串参数

这部分
listing.php?id=$1
说明将向浏览器提供什么页面。
$1
请求第一个querystring参数,并将其附加到URL,如下所示。。。your-domain.com/2146_east_fifth_street

这是您在URL栏中看到的,而不是。。。your domain.com/listing.php?id=2146_east_fifth_street

编辑

重写规则的第二部分是“真实”页面所在的位置

如果你想让你的url读/profile/philip

您的重写规则将以/profile/开头,如下所示


RewriteRule^profile/(.*)$path/to/the/real/file/index.php?id=$1
in.htaccess
$1
是对组的反向引用,通常来自regex语句。 每个组都有自己的引用,所以重写

RewriteRule /profile/(.*)/([0-9]) /profile/index.php/$1/$2
$1
将等于该组的
(.*)

$2
将等于
([0-9])
的值,该值只能包含数字

等等

当id号和url是动态的时,它会有所帮助。因此,您不需要逐个手动添加它们

示例url:

 website.com/profile/idealcastle/25555

然后在php或其他语言中,您可以提取这些“url段”。就像使用“query”参数一样,
?id=simon
为了搜索引擎优化的目的使用合适的URL要好得多

in.htaccess
$1
是对组的反向引用,通常来自regex语句。 每个组都有自己的引用,所以重写

RewriteRule /profile/(.*)/([0-9]) /profile/index.php/$1/$2
$1
将等于该组的
(.*)

$2
将等于
([0-9])
的值,该值只能包含数字

等等

当id号和url是动态的时,它会有所帮助。因此,您不需要逐个手动添加它们

示例url:

 website.com/profile/idealcastle/25555
然后在php或其他语言中,您可以提取这些“url段”。就像使用“query”参数一样,
?id=simon
为了搜索引擎优化的目的使用合适的URL要好得多

反向参考:

RewriteRule ^.*$ /?id=$1
1美元将为空

RewriteRule ^(.*)$ /?id=$1
$1将是任何匹配的
*

RewriteRule ^(a|b|c)/(d|e|f)$ /?id=$1-$2
$1可能是“a”、“b”或“c”,取决于哪个匹配,$2可能是“d”、“e”或“f”,取决于哪个匹配

见:

这里必须记住一件重要的事情:每当您在模式或CondPattern中使用括号时,都会在内部创建反向引用,可以与字符串
$N
%N
一起使用(请参见下文)。这些可用于创建
重写规则的替换参数
重写条件
的测试字符串参数

RewriteRule
模式中的捕获(与直觉相反)可用于所有前面的
RewriteCond
指令,因为
RewriteRule
表达式是在单个条件之前计算的

图1显示了将反向引用传输到哪些位置进行扩展,并说明了
重写规则
重写条件
匹配的流程。在接下来的章节中,我们将探讨如何使用这些反向引用,因此,如果一开始对您来说有点陌生,请不要担心


这会改变吗

localhost/test/index.php?philip
to:
localhost/test/profile/philip
RewriteRule (.*) profile/profile.php?id=$1
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_FILENAME}.php -d
RewriteRule ^profile/(.+)/?$ profile/profile.php?id=$1