Php 在url重写中,=$1意味着什么?
我在stackoverflow或google上找不到任何关于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
=$1
含义的信息。我得到的只是一些肤浅的信息,但对像我这样的初学者来说却一无所获。它有什么作用
如果我有这样的东西:
www.website.com/profile.php?simon
simon的名称是否对应于$1
变量以及为什么为1
我是这样理解的:
id=$1(*)profile/profile.php?
id=simonwww.website.com/profile.php?
www.website.com/profile/simon
我试图输入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