这是代码无法正常工作的确切部分
if(isset($_GET['Champion'])){
$championget = trim(urldecode($_GET['Champion']));
echo $championget;
$championexists = $conn->prepare("SELECT * FROM champions where Champion = ?");
$championexists->bind_param('s', $championget);
$championexists->execute();
$championexistsresult = $championexists->get_result();
if(mysqli_num_rows($championexistsresult)==0){
echo 'Champion doesn\'t exist';
exit;
}elseif(mysqli_num_rows($championexistsresult)>=1)
{
//Continue here
include('php/champion.php');
exit;
}
}
使用http://localhost/leaguenotes/Cassiopeia等常规名称正常工作 但我的名字有'在他们中,这就是为什么我编码他们所以他们看起来像这样http://localhost/leaguenotes/Cho%27Gath但这会重定向到文件夹索引
这也是可能有问题的htaccess
ErrorDocument 404 /
ErrorDocument 403 /
Options ALL -Indexes
RewriteEngine On
RewriteRule ^([0-9/.]+)$ index.php?Patch_No=$1 [NC,L]
RewriteRule ^([0-9/.]+)&([0-9a-zA-Z_-]+)$ index.php?Patch_No=$1&tab=$2 [NC,L]
RewriteRule ^patches php/patches.php [NC,L]
RewriteRule ^([0-9a-zA-Z_-]+)$ index.php?Champion=$1 [NC,L]
这似乎是因为%27我的代码没有把它作为一个变量
答案 0 :(得分:2)
在通过重写规则发送URI之前,任何URL编码(例如%27
)都会被解码,这意味着您无法尝试与%27
匹配,而是与解码的内容进行匹配。 / p>
所以代替正则表达式:
[0-9a-zA-Z_-]
你需要包含撇号
['0-9a-zA-Z_-]
答案 1 :(得分:0)
不要使用它们。纯粹坚持A-Za-z0-9和_。 (您可以使用其他一些字符,但它们是保留的并且具有特殊含义)。