Mod-rewrite突然改变PHP变量

时间:2012-02-21 17:27:29

标签: php .htaccess mod-rewrite

我目前正在开发一个网站,将展示一些产品。我最初从外部XML文件中获取这些产品并将它们存储在数据库中,然后我从数据库中获取它们以在网站上显示它们(从XML到数据库是一个自动化的cronjob过程)。

这一切都很好,但想要提供一些背景信息。

对于本网站,我使用以下rewriteRules

RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)$ index.php?page=product&cat=$1$cat2=$2&cat3=$3&xid=$4 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)$ index.php?page=product&cat=$1&cat2=$2&xid=$3 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)$ index.php?page=product&cat=$1&xid=$2 [L]

这在几乎所有情况下都有效,但有一种情况,一旦某个产品显示出xid更改值。我花了一段时间才发现这是因为RewriteRules。我可以确保你不是因为别的东西,因为当我“跳过”rewriteRules并以常规方式去那里时,它只是工作正常。

我想要这些,以便人们可以转到.com/Ladies/1.com/Ladies/pants/4.com/Ladies/Pants/Shorts/2。然而现在出现了奇怪的部分。

当我创建像

这样的会话时
$_SESSION["pid"] = $mysqli->real_escape_string($_GET["xid"]); 

然后$_SESSION["pid"]将更改为此新值。但是如果我创造了

$_SESSION["sql"] = "SELECT * FROM somthing WHERE id = " . $mysqli->real_escape_string($_GET["xid"]);

然后它会将其从"SELECT * FROM something WHERE id = 1"更改为"SELECT * FROM something WHERE id = 0810890000116"

每当我使用$_GET["xid"]时,无论它是否在字符串的中间,它都会改变它。

当我执行一个名为php脚本的AJAX时,甚至当我返回主页并echo $_SESSION["pid"]时,都会发生这种情况。

这些数字是该产品的EAN编号!这个EAN号码甚至不在我自己的数据库中。我几乎肯定它,因为我检查和检查,它甚至没有在描述或其他什么。这就是为什么我知道这个产品有问题的原因。

有没有人对这类问题有所了解?

我对重写规则没有任何实际意义,但这个问题对我来说似乎很奇怪。它让我相信服务器内存上的实际位置被改变了,否则我看不到在字符串中间使用它时值的变化。我已经尝试过重命名它并没有解决它。

0 个答案:

没有答案