我htaccess RewriteRules用于在网址中隐藏GET变量,但它干扰了一个打开的Javascript函数将PHP文件读入div。
htaccess文件如下所示:
Options +FollowSymLinks -indexes
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
## don't do anything
RewriteRule ^ - [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ ?x=$1&z=$2&y=$3&r=$4 [L,NC,QSA]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ ?x=$1&z=$2&y=$3 [L,NC,QSA]
RewriteRule ^([^/]+)/([^/]+)/?$ ?x=$1&z=$2 [NC,L,QSA]
RewriteRule ^([^/]+)/?$ ?x=$1 [L,NC,QSA]
</IfModule>
,Javascript看起来像这样:
function NextQ(qid, cor, ans, quiz, topic, age, Nm)
{
if (qid=="" && qid!="0")
{
document.getElementById("txtHint").innerHTML="hello";
return;
}
if(age==true)
{
age = document.getElementById("age").value;
}
if(Nm==true)
{
Nm = document.getElementById("Nm").value;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST", quiz, true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("qid=" + qid +"&ans="+ans +"&cor="+cor+"&topic="+topic+"&age="+age+"&Nm="+Nm);
}
javascript基本上POST到iquiz.php(称为测验的变量)并将响应放入Div中。问题是,当RewriteRules生效时,index.php会在Div中开启。
如何阻止这种情况发生?我无法看到Javascript发送的网址是什么。
修改
这源于我在htaccess规则中遇到的一个更大的问题,如果提供了无效的url,index.php会自动打开很多次。