带有Wordpress主题的URL中的#问题?

时间:2013-09-13 04:29:43

标签: php wordpress redirect wordpress-plugin wordpress-theming

我遇到了一个严重的问题,并且不知道发生了什么...我将指出导致此Wordpress主动门户出现多个问题的一般问题。

重现的步骤:

  1. 访问网址:http://gamersgeographic.com/en/(或本网站上的任何帖子)
  2. 将#abc或#anything附加到网址
  3. 网址尝试解析一秒钟并神奇地删除"#"而改为/ abc或/ anything,当然不存在,并且找不到404页面。
  4. 即使存在#abc的本地锚点,行为也是一样的。
  5. 现在,请考虑以下情况:

    1. 访问http://gamersgeographic.com/monster-hunter-diary-1/
    2. 评论链接附加#comments或#respond,具体取决于评论是否存在。
    3. 两个锚点都存在于单个帖子页面上
    4. 在找到它们之后仍然会重定向到/评论并给出404
    5. 带#comments的直接网址例如http://gamersgeographic.com/monster-hunter-diary-1/#comments有效,但当我将任何基本网址更改为#comments时,它会重定向到404 ...
    6. 我已尝试过几种与永久链接的组合,所以这不是问题。我甚至在php中编写了我自己的Comment链接生成器 href="#comments"
      但仍然没有运气......

      如果您需要有关theloop.php中任何功能代码的任何进一步信息或其他任何信息,请告诉我。

      提前致谢! 此致

      .htaccess的内容如下:

      # BEGIN WordPress
      <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]
      </IfModule>
      
      # END WordPress
      

3 个答案:

答案 0 :(得分:2)

这不是PHP问题,它是Javascript:当你重现它时很明显,你可以通过禁用Javascript并在URL的末尾添加#comments来测试它;它会起作用。

现在,我为你做了一些工作,罪魁祸首是一个名为hashchange.js的Javascript文件。例如,看看这一行:

function second_passed() { 
    if(current_page!=location.href {
        get_page_by_hash(location.href);
    }
    setTimeout(second_passed,1000);
}

这解释了为什么你会看到“正在工作”一秒钟。

这是重定向:

jQuery(window).hashchange(function() {
    var link = window.location.hash.replace("#", "");
    get_page_by_hash(link)
});

请注意,hashchange是jQuery Mobile中可用的事件处理方法。

答案 1 :(得分:0)

<link rel="canonical" href="URL OF YOUR HOMEPAGE HERE>  

<head></head>部分的header.php中添加此内容,然后尝试。它不应该给出404错误!

答案 2 :(得分:0)

如您所知,页面书签的使用方式是锚点的href =“”指向#some-place。为了实现这一点,#some-place必须是你想去的页面中元素的id。

例如:

http://gamersgeographic.com/monster-hunter-diary-1/#respond

应该带你到那个页面中id =“respond”的元素。

如果具有该ID的元素不存在,您将无法前往它,并且可能是导致404 Not Found的原因。但是,如果元素确实存在于具有正确ID的页面上并且仍然重定向到404,那么您可能需要检查Web服务器配置以确保它不以某种方式过滤#。