gpt4 book ai didi

php - .htaccess mod_rewrite 中的加号和百分号

转载 作者:行者123 更新时间:2023-12-05 07:59:53 25 4
gpt4 key购买 nike

我正在尝试通过 .htaccess 对某个 URL 应用 RewriteRule,但我遇到了问题。

这是我之前针对此特定用法的代码:

RewriteRule ^levels-u-([a-z0-9_-]+)\.html$ levels.php?p=$1&i=u&r=true [QSA,L,NC]
RewriteRule ^levels-u-([a-z0-9_-]+)-\(([a-z]+)\)\.html$ levels.php?p=$1&i=u&n=$2&r=true [QSA,L,NC]

它的工作方式是可能有这个页面:

levels-u-username.html

或本页:

levels-u-username-(text).html

但用户名的文本也可以包含空格和方括号(显示为 +、%5B 和 %5D)。

所以我用这段代码来匹配任意字符组合

RewriteRule ^levels-u-([^/]+)\.html$ levels.php?p=$1&i=u&r=true [QSA,L,NC]
RewriteRule ^levels-u-([^/]+)-\(([a-z]+)\)\.html$ levels.php?p=$1&i=u&n=$2&r=true [QSA,L,NC]

所以现在,这不会输出 404 错误:

levels-u-username+%5Bmore%5D.html(即“用户名[more]”)

但现在的问题,是后者

levels-u-username-(text).html

将在第一个 RewriteRule 中将“username-(deleted)”重写为 $1,而不是在第二个中使用 $1 = “username” 和 $2 = “text”

我想弄清楚的是,如何将加号和括号合并到 .htaccess mod_rewrite 的正则表达式中:

([a-z0-9_-]+)

因为

([^/]+)

与另一个 RewriteRule 产生冲突。

同样,这些是我需要添加到表达式中的字符:

“+”、“%5B”(即“[”)、“%5D”(即“]”)

我的另一个想法是尽可能禁用短语“-(”?

最佳答案

只是为了支持您可以使用的那些额外字符:

RewriteRule ^levels-u-([\[\]+\w]+)\.html$ index.php?p=$1&i=u&r=true [QSA,L,NE]

RewriteRule ^levels-u-([\[\]+\w]+)-\(([a-z]+)\)\.html$ levels.php?p=$1&i=u&n=$2&r=true [QSA,L,NE]

关于php - .htaccess mod_rewrite 中的加号和百分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20276114/

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