.htaccess 导致 Ajax 出现问题

发布于 2024-10-20 20:12:47 字数 992 浏览 1 评论 0原文

我使用以下 Javascript 代码将线程标记为最喜欢的:

function fave(tid){
 xmlhttp = createXHR();
 if(xmlhttp){
  xmlhttp.onreadystatechange = function(){
   if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
    get("fave"+tid).innerHTML = xmlhttp.responseText;
   }
  }
  xmlhttp.open("GET", "thread?act=fave&tid="+tid+"&ajax=1", true);
  xmlhttp.send(null);
 }
}

我的 .htaccess 文件包含此行 RewriteRule ^thread/([0-9]+)? /thread?tid=$1 [L],将 /thread?tid=1234 变成更漂亮的 /thread/1234

对于第一个 URL,一切正常,但 /thread/1234 会导致错误。 在此处输入图像描述 点击带下划线的链接返回: 在此处输入图像描述

响应 HTML 是整个页面的副本! 为什么同一个文档的唯一区别是 /thread?tid=1234/thread/1234 URL 的行为方式不同?

更新:

RewriteRule ^thread/([0-9]+)? /thread?tid=$1 [L,QSA]

改进的.htaccess行解决了这个问题。

I use this Javascript code to mark threads as favourite:

function fave(tid){
 xmlhttp = createXHR();
 if(xmlhttp){
  xmlhttp.onreadystatechange = function(){
   if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
    get("fave"+tid).innerHTML = xmlhttp.responseText;
   }
  }
  xmlhttp.open("GET", "thread?act=fave&tid="+tid+"&ajax=1", true);
  xmlhttp.send(null);
 }
}

My .htaccess file contains this line RewriteRule ^thread/([0-9]+)? /thread?tid=$1 [L], which turns /thread?tid=1234 in more pretty /thread/1234.

With the first URL everything works fine, but /thread/1234 causes an error.
enter image description here
Click on the underlined link returns:
enter image description here

Response HTML is a copy of a whole page!
Why the same document with the only difference between /thread?tid=1234 and /thread/1234 URLs behaves in different ways?

UPDATE:

RewriteRule ^thread/([0-9]+)? /thread?tid=$1 [L,QSA]

The improved .htaccess line solved the problem.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浪荡不羁 2024-10-27 20:12:47

尝试在 htaccess 中使用 [QSA] 修饰符。

乍一看,您的问题是重写 URL 后不会附加 ajax=1 和 act=fave 值。

所以 RewriteRule 应该是:

RewriteRule ^thread/([0-9]+)? /thread?tid=$1 [L,QSA]

然后你的代码:

xmlhttp.open("GET", "thread/"+tid+"?ajax=1&act=fave", true);

Try using the [QSA] modifier in your htaccess.

At the first look, your problem is that the ajax=1 and act=fave values do not get appended after rewriting the URL.

So the RewriteRule should be:

RewriteRule ^thread/([0-9]+)? /thread?tid=$1 [L,QSA]

And then your code:

xmlhttp.open("GET", "thread/"+tid+"?ajax=1&act=fave", true);
扶醉桌前 2024-10-27 20:12:47

在 PHP 中捕获 AJAX 事件一定有问题 - 尝试 var_dump GET vars ...我认为你会错过“ajax 标识符”:)

There must be problem within capturing the AJAX event in PHP - try to var_dump the GET vars ... I think that you will miss "the ajax identifier" :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文