微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检索没有参数名称的参数

如何解决检索没有参数名称的参数

我有一个注册和激活码,我正在更新它,在用户注册后它会向他们发送一封电子邮件以进行激活。

链接已通过电子邮件发送

/user/activate/$hashed_confirm_code

产生

http://example.com/user/activate/0dbc0aef3d4d9d3e67ee4bf6c

我去了 http://www.visiospark.com/mod-rewrite-rule-generator/ 并进行了模组重写,相应地更改了电子邮件链接

重写已开启

RewriteCond %{THE_REQUEST} /([^.]+)\.PHP [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.PHP -f
RewriteRule ^ %{REQUEST_URI}.PHP [NC,L]

RewriteCond %{QUERY_STRING} (^|&)hash_token=($|&)
RewriteRule ^user/activate$ /user/activate/?&%{QUERY_STRING}

如果我点击链接,它会在浏览器中产生以下内容

http://example.com/user/activate/0dbc0aef3d4d9d3e67ee4bf6c

然而它只是给出了一个500错误,我的激活码功能的基础是

function activate_user(){

    if (($_SERVER['REQUEST_METHOD'] === "GET") && isset($_SERVER['QUERY_STRING'])) {

        $confirm_code = $_SERVER['QUERY_STRING'];

       //do stuff


    }
}

现在如果我在浏览器中更改链接

example.com/user/activate/0dbc0aef3d4d9d3e67ee4bf6c93c

到这里

example.com/user/activate?0dbc0aef3d4d9d3e67ee4bf6c

它有效,所以如果我删除正斜杠并添加问号它有效

解决方法

重写模式不正确,您应该获取匹配的变量并将其作为查询字符串参数传递给文件(这里我假设它称为activate.php):

RewriteRule ^user/activate/([^/]+)/?$ user/activate.php?code=$1 [L,NC]

PS:我使用了以下标志:

L 导致 mod_rewrite 停止处理规则集。

NC 使 RewriteRule 以不区分大小写的方式进行匹配。

您也可以使用 QSA 来组合查询字符串。

更新:

RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

这两条规则会造成循环,为什么?因为第一个表示如果您收到包含 .php 的请求,请继续删除 .php 文件,第二个表示如果我们添加 {{1} },继续添加扩展名。您需要考虑的重要一点是,每当您更改 url 时,apache 都会从顶部开始并尝试使用新的 url。 为了防止您可以在文件顶部使用:

.php

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。