1

这个问题似乎很简单,但经过 3 天的搜索,我放弃了。我以为我会在这里找到它,它似乎有类似的,但它不适用于这些东西。

目前,我有一位客户基于他以前的 JS/AJAX 驱动网站进行了非常先进的营销。他网站的所有反向链接就像

服务器/#!关联

我已经建立了一个 wordpress 网站,我需要让交叉链接正确打开页面。

但是如果我得到这个链接

服务器/#!关联

当 Wordpress 处理它时,我得到以下 URL

服务器 /

我已经探索过唯一的方法,或者至少我知道的唯一方法是用 wordpress 来做,但这似乎并不容易。

我有以下脚本可以添加 #! 但需要删除(只是在某处找到)

<?php 
    $webSiteUrl = get_bloginfo('url')."/";
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {
        $pageURL .= "s";
    };
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    };
    if($webSiteUrl!=$pageURL){
        $pageHash = substr($pageURL, strlen($webSiteUrl), strlen($pageURL));
        header("location:".$webSiteUrl."#!/".$pageHash."");
        exit;
    };
 ?>

多亏了squeamish ossifrage,我快到了。我使用此脚本,因为您提供的脚本有一些条件问题

if ('' !== window.location.hash && '#!' !== window.location.hash) {
  hash = location.hash.match(/^#!(.*)/)[1];
  /* ... do something with hash, like redirecting to */
  /* another page, or loading page content via AJAX. */
  /* If all you want to do is remove everything from */
  /* the URL starting with `#!', then try this:      */
  location.href = location.protocol+'//'+location.host+location.pathname;
}

它似乎有效,但我得到了根页面。

例如我打开

myweb.com/#!thisone

我得到

myweb.com/

并且只是总结一下,这样有人可以节省大量时间 - 工作脚本是

if ('' !== window.location.hash && '!' !== window.location.hash) {
      hash = location.hash.match(/^#!(.*)/)[1];
      /* ... do something with hash, like redirecting to */
      /* another page, or loading page content via AJAX. */
      /* If all you want to do is remove everything from */
      /* the URL starting with `#!', then try this:      */
      location.href = location.protocol+'//'+location.host+location.pathname+'/'+hash;
    }
4

1 回答 1

1

您不能在 PHP 中执行此操作,因为服务器永远不会看到 URL 的片段部分(即 # 符号及其后面的所有内容)。

您必须改用客户端 Javascript。可能是这样的:

if /^#!/.test(location.hash) {
  hash = location.hash.match(/^#!(.*)/)[1];
  /* ... do something with hash, like redirecting to */
  /* another page, or loading page content via AJAX. */
  /* If all you want to do is remove everything from */
  /* the URL starting with `#!', then try this:      */
  location.href = location.protocol+'//'+location.host+location.pathname;
}

编辑:如果我理解正确,您希望将哈希值放在重定向 URL 的末尾。这很容易做到。只需将上述代码的倒数第二行更改为

`location.href = location.protocol+'//'+location.host+location.pathname+'/'+hash;`

额外的“/”可能是不必要的;我会让你弄清楚细节:-)

于 2013-11-14T01:45:37.020 回答