gpt4 book ai didi

php - PHP 的 $_GET 和 URL 重写

转载 作者:可可西里 更新时间:2023-10-31 22:05:51 24 4
gpt4 key购买 nike

URL 重写如何影响 PHP 的 $_GET 参数?

假设我有一个像 http://example.com/index.php?p=contact 这样的 URL,我使用 $_GET['p'] 来告诉index.php 提供联系页面。如果我使用将 URL 转换为 http://example.com/contact 的重写规则,$_GET['p'] 是否仍会按预期工作?

如果是这样,您能否详细说明它为何起作用?如果不是,可以使用什么策略来解决问题,以便页面在重写和不重写的情况下都能正常工作?

最佳答案

我会将 Grant 的回答修改为“是的,这将大部分按预期工作。”

具体来说,mod_rewrite 对现有查询字符串的行为可能会令人惊讶。例如,让我们采用以下规则,它会转换您提供的 URL:

RewriteRule /contact /index.php?p=contact

这会将 /contact 正确地重写为 /index.php?p=contact 并且可以通过 $_GET['p'] 访问页面名称。但是,如果您将此技术与使用页面名称以外的参数的脚本一起使用,它会变得有点棘手。此规则还将 /contact?person=Joe 转换为 /index.php?p=contactperson=Joe 参数完全消失了!有两种方法可以解决这个问题。

最简单的方法是在您的规则中使用[QSA](“查询字符串追加”)标志,这会将原始查询字符串放在所提供的参数之后在规则中,将 /contact?person=Joe 翻译成 /index.php?p=contact&person=Joe:

RewriteRule /contact /index.php?p=contact [QSA]

但是,这使得您的 p= 参数有可能被覆盖。访问 /contact?p=about 将被重写为 /index.php?p=contact&p=about,所以 $_GET['p'] 将在您的脚本中返回“about”,而不是“contact”。要解决此问题,请改用 QUERY_STRING 变量:

RewriteRule /contact /index.php?%{QUERY_STRING}&p=contact

这保证 $_GET['p'] 在使用此规则时将始终 返回“contact”,无论您的访问者是否乱用您的 URL。 :-)

关于php - PHP 的 $_GET 和 URL 重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/505338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com